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