JSTACK 정의 :
Jstack은 Java 가상 머신과 함께 제공되는 스택 추적 도구입니다.
기본 소개 :
Jstack은 Java Virtual Machine의 현재 시간의 스레드 스냅 샷을 생성하는 데 사용됩니다. 스레드 스냅 샷은 현재 Java Virtual Machine의 각 스레드가 실행되는 메소드 스택 모음입니다. 스레드 스냅 샷을 생성하는 주요 목적은 스레드, 데드 루프 및 외부 리소스를 요청하여 발생하는 장기 대기와 같은 스레드의 장기 일시 중지 이유를 찾는 것입니다.
스레드가 일시 중지되면 Jstack을 통해 각 스레드의 통화 스택을 확인할 수 있으며, 반응이없는 스레드가 백그라운드에서 무엇을하고 있는지 또는 어떤 자원이 기다리고 있는지 알 수 있습니다.
명령 형식 :
Jstack [옵션] PID
기본 매개 변수 :
-f 'jstack [-l] PID'가 해당하는 경우 FORES 인쇄 스택 정보
-L 긴 목록. java.util.concurrent에 속하는 고유 한 동기화 제 목록과 같은 잠금에 대한 추가 정보를 인쇄하십시오.
-M Java 및 기본 C/C ++ 프레임 워크의 모든 스택 정보를 인쇄합니다. -h | -HELP 인쇄 도움말 정보
PID Java 프로세스 ID를 인쇄 해야하는 구성 정보를 인쇄 해야하는 JPS 도구를 사용하여 쿼리 할 수 있습니다.
사례
C :/사용자/관리자> JSTACK 5516 풀 스레드 덤프 Java Hotspot (TM) 64 비트 서버 VM (24.79-B02 Mixed Mode) : "DestroyJavavm"PRIO = 6 TID = 0x00000000000027D800 NID = 0x1BB0 대기 대기 [0x00000000000000] JAVA.LANG.LANG.LANG.LANG. "Thread -1"PRIO = 6 TID = 0x0000000000000CB13800 NID = 0x19AC 모니터 입력 대기 [0x0000000000D67F000] java.lang.thread.state : thread.deadlockdemo $ 2.run (Deadlockdemo.java:35)에서 차단 된 (객체 모니터) - 차단 (객체 모니터) - (java.lang.string) - 잠금 <0x000007d5a9beb8> (java.lang.lang.lang.run (알 수없는 소스) "스레드 -0"prio = 6 tid = 0x00000000000cb0e800 nid = 0x6bc 모니터 입력 [0x000000000000000000000000000000000000000d48f000]. java.lang.thread.state : thread.deadlockdemo $ 1.Run (DeadlockDemo.java:21) - 차단 (객체 모니터) - <0x00000007d5a9beb8> (java.lang.string) - 잠금 <0x00000007d5a9be88> (Java.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang). java.lang.thread.run (알 수없는 소스)
교착 상태 코드가 여기에서 실행되어 프로그램의 두 스레드가 상대방이 잠금을 해제 할 때까지 대기하여 프로그램이 교착 상태가됩니다.
이 코드에서 Deadlockdemo.class의 35 행 및 21 행이 차단 된 것을 분명히 알 수 있으며이 기능을 최적화해야합니다.
추신 : 실제 작동에서 덤프 정보는 종종 문제를 확인하기에 충분하지 않습니다. 세 가지 덤프 정보를 생성하는 것이 좋습니다. 각 덤프가 동일한 문제를 가리키면 문제의 전형성을 결정합니다.
요약
위는이 기사에서 Jstack 및 스레드 덤프 인스턴스의 분석에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!