1. 미들웨어이야기/01. JVM

jstack 명령어를 활용한 Thread dump 생성하기

알 수 없는 사용자 2014. 12. 2. 19:22

JVM의 thread dump를 생성하는 명령어.

Unix/Linux의 경우 kill -3 <PID> 명령어를 이용하여 JVM의 thread dump 생성이 가능하지만 Windows의 경우 서비스로 기동되어 있을 경우 command console이 없어 thread dump의 생성이 어려움

이럴 경우 jstack 명령어를 활용하여 thread dump를 생성할 수 있다.


- 필요한 환경 

  1. UNIX / Linux : JAVA 5 이상

  2. Windows : JAVA 6 이상


- 명령어 위치 ( JAVA_HOME은 JDK 설치 폴더를 의미함)

  $JAVA_HOME/bin/jstack.exe


- 명령어 사용법

  > jps -v 

    ... JVM의 PID를 확인 ...

  > jstack <PID> > threadump.txt


  예시)

  > jps -v 

    1640 jar -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m -XX:NewSize=128m

  > jstack 1640 > threadump.txt

threaddump.txt 파일 오픈 시 아래와 같이 thread의 stack trace를 확인해 볼 수 있다.

 

2014-12-02 19:21:38

Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode):

"NanoOffset" daemon prio=6 tid=0x00000000096be800 nid=0x2394 waiting on condition [0x000000000dadf000]

   java.lang.Thread.State: TIMED_WAITING (sleeping)

at java.lang.Thread.sleep(Native Method)

at java.lang.Thread.sleep(Thread.java:340)

at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:360)

at org.apache.jmeter.samplers.SampleResult$NanoOffset.getOffset(SampleResult.java:1321)

at org.apache.jmeter.samplers.SampleResult$NanoOffset.run(SampleResult.java:1314)


by 이환호

정보 출처 : http://docs.oracle.com/javase/6/docs/technotes/tools/index.html#basic