레이블이 dump인 게시물을 표시합니다. 모든 게시물 표시
레이블이 dump인 게시물을 표시합니다. 모든 게시물 표시

2009년 3월 19일 목요일

JVM Heap Dump를 생성하기 위한 옵션정리

1. Sun JDK

1) HPRof 사용

JDK 버전에 따라 JVM 옵션에 -Xrunhprof:heap=dump,format=b,doe=n (JDK 1.4) 또는 -agentlib:hprof=heap=dump,format=b,doe=n (JDK 1.5)을 명시하고, 실행시에 Control-break 또는 kill -3 명령으로 heap dump를 생성할 수 있다.
Windows 환경이라면 SendSignal.exe를 사용하면 된다.
하지만 오버헤드가 너무 커서 운영환경에서 사용하기에는 무리가 따른다. 이 옵션없이 WAS를 기동하면 30초면 뜨는데, 옵션을 설정하면 무려 3분 30초가 걸렸다.

* 설정
- -Xrunhprof:heap=dump,format=b,doe=n (JDK 1.4)
- -agentlib:hprof=heap=dump,format=b,doe=n (JDK 1.5)
* heap dump 생성
- kill -3
- SendSignal.exe

2) OutOfMemoryError 발생 시 자동으로 heap dump

JVM 옵션에 -XX:+HeapDumpOnOutOfMemoryError를 설정하면 OutOfMemoryError 발생 시에 heap dump를 현재 실행 디렉터리에 생성한다. JBoss의 경우는 $JBOSS_HOME/bin 디렉터리이다. heap dump가 생성되는 경로를 지정하려면 -XX:HeapDumpPath를 설정해준다.
Sun JDK 1.4.2_12, 1.5.0_7, 그리고 HP 1.4.2_11 이후 버전에서 지원된다.

* 설정
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:HeapDumpPath=/path

* heap dump 생성
- OutOfMemoryError 발생시

3) SIGQUIT (kill -3 )

JVM 옵션에 -XX:HeapDumpOnCtrlBreak를 설정하면 SIGQUIT signal로 heap dump를 생성할 수 있다. JDK 1.5.0_14 부터 지원된다. 하지만, Windows와 Linux 버전의 JDK 1.5.0_14는 버그로 인해 "/"가 포함된 파일명으로 heap dump를 생성하려고해 No such file or directory라는 에러를 내며 heap dump가 생성되지 않는다. Solaris 버전은 테스트를 못해봤는데 설마 동작하지 않을까 싶다.

* 설정
- -XX:HeapDumpOnCtrlBreak
* heap dump 생성
- kill -3
- SendSignal.exe

4) jmap 사용

별도로 JVM 옵션에 명시할 필요없이 JDK에 포함되어 있는 jmap을 사용해 heap dump를 생성할 수 있다. Windows 버전은 JDK 1.5 버전에 jmap이 포함되어 있지 않으므로 사용할 수 없다.

* heap dump 생성
- jmap -heap:format=b (JDK 1.5)
- jmap -dump:format=b,file= (JDK 6)