java.lang.OutOfmemoryError: PermGen Space问题产生原因及解决方式
目前在手中的一项目经常会(两周左右)出现一次PermGen Space的报错问题,第一次出现的时候已经按照通用的方式在TOMCAT的bin目录下修改了catalina.sh(windows系统位catalina.bat)文件,添加了
-XX:PermSize=128m -XX:MaxSize=512m并重启。
理论上应该不会再出现PermGen Space的问题,但是实际还是出现了,于是又查找了一些产生问题的原因。有一个现象是,该项目在使用shutdown.sh命令进行停止时经常是失败的,这时就会使用kill命令来杀死;这样就会出现存在 PermGen space 里面的内存不会被释放;
所以每次如果使用kill命令来杀死项目,则应该通过手动来回收垃圾;
在linux环境中执行echo 3 > /proc/sys/vm/drop_caches即可。
还会持续关注该项目情况,也会更新问题解决方式。
20201209更新:
项目依然还是出了PermGen Space错误,这次又仔细检查了一下catalina.sh文件,发现在设定上JAVA_OPTS写错了,大写的尴尬。
重新设定会发现出现了一个奇怪的现象:启动tomcat后后台会报错Could not find the main class: -XX:PermSize 这里我没有查到相关的参考资料,于是我把这段去掉,仅留下-XX:MaxSize=512m;项目即可正常启动。
项目使用的JDK1.6版本,我在网上查询无法设定:PermSize的原因,并未找到相关资料。
项目情况会持续关注,但是上述问题如有大佬看到也希望能得到解答。
参考链接:
1.Tomcat无法shutdown进程问题解决办法
2.Linux下清理内存和Cache方法