天天看點

java.lang.OutOfMemoryError: PermGen space 問題定位的方法

1)首先要擷取産生java.lang.OutOfMemoryError: PermGen space問題的heapDump資料,也就是Java虛拟機在記憶體中的資料copy

      方法(此方法針對SUN的JDK):

                 系統啟動加入參數:–XX:+HeapDumpOnOutOfMemoryError

                設定示例:set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx800m -XX:PermSize=64M-XX:MaxPermSize=128m-Djava.awt.headless=true-XX:+HeapDumpOnOutOfMemoryError

                注:如增加HeapDumpOnCtrlBreakOption就可以通過ctrl+break或收到SIGQUIT生成heapdump檔案

                設定示例: set JAVA_OPTS=%JAVA_OPTS% -server-Xms512m -Xmx800m -XX:PermSize=64M-XX:MaxPermSize=128m-Djava.awt.headless=true-XX:+HeapDumpOnOutOfMemoryError-XX:+HeapDumpOnCtrlBreak

       設定好上述參數後,在發生java.lang.OutOfMemoryError: PermGen space問題時,Java虛拟機會生成一個hprof格式的檔案,如果是在eclipse的開發模式下發生此問題,在eclipse的控制台會輸出如下資訊:             

java.lang.OutOfMemoryError: PermGen space
       Dumping heap to java_pid5876.hprof ...
       Heap dump file created [168021794 bytes in 2.515 secs]
           

        然後找到hprof格式的heapDump檔案,(eclipse開發模式下該檔案的位置就是eclipse安裝目錄,tomcat的沒試過,網上說是放在了tomca_home/bin目錄下了)

2)分析hprof檔案。這個需要用到專業的分析工具,工具連結如下:

        http://java.sun.com/developer/technicalArticles/Programming/HPROF.html