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