Java 스레드 덤프를 얻으려면 -3을 종료하십시오.
kill -3
유닉스에서 JVM의 스레드 덤프를 보려면 명령을 사용 하고 있습니다. 그러나이 kill
명령 의 출력을 어디에서 찾을 수 있습니까? 나는 길을 잃었다!
또는 jstack (JDK에 포함)을 사용하여 스레드 덤프를 수행하고 원하는 위치에 출력을 작성할 수 있습니다. 유닉스 환경에서는 사용할 수 없습니까?
jstack PID > outfile
스레드 덤프는 kill -3을 실행 한 VM 외부의 시스템에 기록됩니다. JVM의 콘솔 출력을 파일로 경로 재지 정하는 경우 스레드 덤프는 해당 파일에 있습니다. JVM이 열린 콘솔에서 실행중인 경우 스레드 덤프가 콘솔에 표시됩니다.
LogVMOutput 진단 옵션 을 사용하여 중단 신호에서 JVM 스레드 덤프 출력을 별도의 파일로 경로 재지 정하는 방법이 있습니다 .
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log
그림 8에 Java 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 : 표준 출력으로 출력합니다.
- 서버가 실행중인 콘솔 창에 액세스 할 수있는 경우 Ctrl + Break 조합 키를 사용하여 std 출력에서 스택 추적을 생성 할 수 있습니다.
- 핫스팟 VM의 경우 jstack 명령을 사용하여 스레드 덤프를 생성 할 수도 있습니다. JDK의 일부입니다. 구문은 다음과 같습니다. 사용법 : jstack [-l] (실행중인 프로세스에 연결) jstack -F [-m] [-l] (중지 된 프로세스에 연결)
- JRockit JVM의 경우 JDK 구문과 함께 제공되는 JRCMD 명령을 사용할 수 있습니다. jrcmd [[]] [-l] [-f 파일] [-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>
그러면 출력 / 스레드 펌프가 위 명령에 지정된 파일 콘솔로 리디렉션됩니다.
- 프로세스 ID 찾기 [PS ID]
- jcmd [PS ID] Thread.print 실행
StandAlone Java 프로세스의 스레드 덤프를 원하는 경우 따라야 할 단계
1 단계 : Java 프로그램을 호출하는 쉘 스크립트의 프로세스 ID 확보
linux$ ps -aef | grep "runABCD"
user1 **8535** 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17796 17372 0 08:15:41 pts/49 0:00 grep runABCD
2 단계 : runABCD에 의해 호출 된 Child의 프로세스 ID를 확보하십시오. 자식을 얻으려면 위 PID를 사용하십시오.
linux$ ps -aef | grep **8535**
user1 **8536** 8535 0 Mar 25 ? 126:38 /apps/java/jdk/sun4/SunOS5/1.6.0_16/bin/java -cp /home/user1/XYZServer
user1 8535 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17977 17372 0 08:15:49 pts/49 0:00 grep 8535
3 단계 : 특정 프로세스에 대한 JSTACK을 가져옵니다. XYSServer 프로세스의 프로세스 ID를 확보하십시오. 즉 8536
linux$ jstack **8536** > threadDump.log
참고 URL : https://stackoverflow.com/questions/4876274/kill-3-to-get-java-thread-dump
'IT story' 카테고리의 다른 글
UIToolBar 항목 정렬 (0) | 2020.07.30 |
---|---|
C # URL이 존재 / 유효한지 어떻게 확인할 수 있습니까? (0) | 2020.07.30 |
ASP.NET에서 Session.Abandon () 대신 Session.Clear ()를 언제 사용해야합니까? (0) | 2020.07.29 |
자바 프로그램을 실행 파일로 컴파일하기 (0) | 2020.07.29 |
CSS 선택기에서 '>'와 공백의 차이점은 무엇입니까? (0) | 2020.07.29 |