-3을 죽여 자바 스레드 덤프를 얻습니다. -3UNIX에서 JVM의 스레드 덤프를

kill -3UNIX에서 JVM의 스레드 덤프를 보려면 명령을 사용 하고 있습니다. 그러나이 kill명령 의 출력은 어디에서 찾을 수 있습니까? 나는 길을 잃었다 !!



답변

또는 jstack (JDK에 포함됨)을 사용하여 스레드 덤프를 가져와 원하는 곳에 출력을 작성할 수 있습니다. 유닉스 환경에서는 사용할 수 없습니까?

jstack PID > outfile

답변

스레드 덤프는 .NET Framework를 실행 한 VM의 시스템에 기록됩니다 kill -3. JVM의 콘솔 출력을 파일로 리디렉션하는 경우 스레드 덤프가 해당 파일에 있습니다. JVM이 열린 콘솔에서 실행중인 경우 스레드 덤프가 콘솔에 표시됩니다.


답변

중단 신호의 JVM 스레드 덤프 출력을 LogVMOutput 진단 옵션을 사용하여 별도의 파일로 리디렉션하는 방법이 있습니다 .

-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log

답변

그림에서 Java 8을 사용 jcmd하는 것이 선호되는 접근 방식입니다.

jcmd <PID> Thread.print

다음은 Oracle 문서 의 스 니펫입니다 .

JDK 8 릴리스에는 JVM 및 Java 애플리케이션의 문제를 진단하기위한 Java Mission Control, Java Flight Recorder 및 jcmd 유틸리티가 도입되었습니다. 향상된 진단 및 성능 오버 헤드 감소를 위해 이전 jstack 유틸리티 대신 최신 유틸리티 인 jcmd를 사용하는 것이 좋습니다.

그러나 이것을 응용 프로그램과 함께 제공하면 라이선스에 영향을 미칠 수 있지만 확실하지 않습니다.


답변

JVM의 stdout이있는 동일한 위치에 있습니다. Tomcat 서버가있는 경우 이것이 catalina_(date).out파일 이됩니다 .


답변

kill -3을 사용하면 표준 출력에서 ​​스레드 덤프를 볼 수 있습니다. 대부분의 애플리케이션 서버는 표준 출력을 별도의 파일에 기록합니다. kill -3을 사용할 때 찾을 수 있습니다. 스레드 덤프를 가져 오는 방법에는 여러 가지가 있습니다.

  • kill -3 <PID>: 표준 출력으로 출력합니다.
  • 서버가 실행중인 콘솔 창에 액세스 할 수있는 경우 Ctrl+Break 키 조합을 사용하여 STDOUT에서 스택 추적을 생성 .
  • 핫스팟 VM의 경우 jstack명령을 사용하여 스레드 덤프를 생성 할 수도 있습니다 . JDK의 일부입니다. 구문은 다음과 같습니다.

    Usage:
    
    jstack [-l] <pid> (to connect to running process)
    jstack -F [-m] [-l] <pid>(to connect to a hung process)
    
     - For JRockit JVM we can use JRCMD command which comes with JDK Syntax:
       jrcmd <jrockit pid> [<command> [<arguments>]] [-l] [-f file] [-p] -h]

답변

Jboss에서는 다음을 수행 할 수 있습니다.

nohup $JBOSS_HOME/bin/run.sh -c  yourinstancename $JBOSS_OPTS >> console-$(date +%Y%m%d).out  2>&1 < /dev/null &
kill -3 <java_pid>

그러면 출력 / threadump가 위의 명령에 지정된 파일 콘솔로 리디렉션됩니다.