IT공부/WLS

이쁜이아빠 2011. 4. 15. 16:02

Heapdump 생성 하기

1. Sun JDK

  1) HPRof 사용

      JDK 버전에 따라 JVM옵션에-Xrunhprof:heap=dump,format=b,doe= n (JDK1.4)또는-agentlib:hprof=heap=dump,format=b,doe=n (JDK 1.5)을 명시하고, 실행시에 Control-break 또는 kill -3 <pid> 명령으로 heap dump를 생성할 수 있다. Windows 환경이라면 SendSignal.exe를 사용하면 된다.

하지만 오버헤드가 너무 커서 운영환경에서 사용하기에는 무리가 따른다. 이 옵션없이 JBoss를 기동하면 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 <pid>

        - SendSignal.exe <pid>

 

 실제 해당 옵션으로 jdk 1.4.2_11 Weblogic 8.1sp6에서 heapdump 생성

 

   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 <pid>)

      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 <pid>

         - SendSignal.exe <pid>

   4) jmap 사용

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

       * heap dump 생성

         - jmap -heap:format=b <pid> (JDK 1.5)

         - jmap-dump:format=b,file=<filename> <pid> (JDK 6)

2. HP JDK

    1)  SIGQUIT (kill -3 <pid>)

        HP의 경우 JVM 옵션에 -XX:+HeapDump를 설정해 SIGQUIT signal heap dump를 생성할 수 있다. 기본적으로 text 형식으로 저장되는데 binary 형식이 필요하면 _JAVA_BINARY_HEAPDUMP 환경변수를 설정하면 된다. 이 방법 외에도 Sun JDK처럼 -XX:+HeapDumpOnCtrlBreak를 설정하면 binary heap dump를 생성한다. JVM 옵션을 변경하기 싫으면 _JAVA_HEAPDUMP 환경변수를 설정해도 된다.

       * 설정

         - -XX:+HeapDump 또는 -XX:HeapDumpOnCtrlBreak

         - export _JAVA_HEAPDUMP=1

       * heap dump 생성

        - kill -3 <pid>

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

        Sun JDK처럼 JVM 옵션에 -XX:+HeapDumpOnOutOfMemoryError를 설정하면 OutOfMemoryError 발생 시에 heap dump를 현재 실행 디렉터리에 생성한다.

 

 

해당 내용은 인터넷에서 검색한 내용입니다. 참고 하세요.

참고 url 은 아래와 같습니다.

 

http://222.231.32.251/?mid=note&search_target=regdate&search_keyword=20090824&sort_index=regdate&order_type=asc&listStyle=webzine&document_srl=269