kill - 3을 사용하여 Java 스레드 덤프를 가져옵니다.
사용하고 있다kill -3
명령어를 사용하여 JVM의 스레드 덤프를 unix로 표시합니다.하지만 이 출력은 어디서 찾을 수 있나요?kill
명령어?길을 잃었어요!!
또는 jstack(JDK에 포함)을 사용하여 스레드 덤프를 가져와 원하는 위치에 출력을 쓸 수 있습니다.Unix 환경에서는 사용할 수 없습니까?
jstack PID > outfile
스레드 덤프는 다음 명령을 실행한 VM의 시스템에 기록됩니다.kill -3
JVM의 콘솔 출력을 파일로 리다이렉트하는 경우 스레드 덤프는 해당 파일에 포함됩니다.JVM이 열린 콘솔에서 실행 중인 경우 스레드 덤프가 콘솔에 표시됩니다.
LogVMOutput 진단 옵션을 사용하여 브레이크 신호 시 JVM 스레드 덤프 출력을 별도의 파일로 리디렉션하는 방법이 있습니다.
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log
Java 8을 사용하면jcmd
권장되는 접근법입니다.
jcmd <PID> Thread.print
다음은 Oracle 문서의 일부입니다.
JDK 8의 릴리스에서는 Java Mission Control, Java Flight Recorder 및 JVM 및 Java 애플리케이션의 문제를 진단하기 위한 jcmd 유틸리티가 도입되었습니다.진단을 강화하고 성능 오버헤드를 줄이려면 이전 jstack 유틸리티 대신 최신 유틸리티 jcmd를 사용하는 것이 좋습니다.
그러나 어플리케이션과 함께 발송하는 것은 라이선스의 의미일 수 있습니다.
JVM의 stdout이 배치되어 있는 장소와 같은 장소에 있습니다.Tomcat 서버가 있는 경우, 이것은catalina_(date).out
파일.
kill - 3을 사용하는 경우 표준 출력에 스레드 덤프가 표시됩니다.대부분의 응용 프로그램서버는 표준 출력을 별도의 파일에 씁니다.kill -3을 사용하면 거기서 찾을 수 있습니다.스레드 덤프를 취득하는 방법은 여러 가지가 있습니다.
kill -3 <PID>
: 표준 출력에 출력을 제공합니다.- 서버가 실행되고 있는 콘솔창에 액세스 할 수 있는 경우는 + 키 조합을 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>
그러면 출력/스레드 덤프가 위의 명령어로 지정된 파일콘솔로 리다이렉트 됩니다
- 프로세스 ID [PS ID]를 검색합니다.
- jcmd [PS ID] Thread.print를 실행합니다.
독립 실행형 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에 의해 호출된 자녀의 프로세스 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을 가져옵니다.XYS Server 프로세스의 프로세스 ID(8536 등)를 취득합니다.
linux$ jstack **8536** > threadDump.log
언급URL : https://stackoverflow.com/questions/4876274/kill-3-to-get-java-thread-dump
'programing' 카테고리의 다른 글
jQuery를 사용하여 요소로 스크롤합니다. (0) | 2022.12.25 |
---|---|
numpy.array 형상(R, 1)과 (R,)의 차이 (0) | 2022.12.25 |
초기화되지 않은 개체 vs NULL로 초기화됨 (0) | 2022.12.25 |
Workbench를 사용하여 서버에서 데이터베이스의 ER 모델을 가져오는 방법 (0) | 2022.12.25 |
선택한 색인으로 MySQL에 임시 테이블 만들기 (0) | 2022.12.25 |