最近才发现TOMCAT启动一段时间后,总是出现java.lang.OutOfMemoryError PermGen space这个错误,后来搜索到答案称:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。根据提示,修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"
”上面加入以下行:
`JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m
-XX:MaxPermSize=128m -Djava.awt.headless=true "`
仍然不行。
打开任务管理器查看内存使用情况,发现,刚启动TOMCAT时JAVA.EXE使用内存在35M左右,后打开网页浏览,每点一个链接JAVA.EXE占用的内存不断增加,不会降低,即便是关闭所有浏览页内存也不会降,当内存占到140多M时出现java.lang.OutOfMemoryError PermGen space这个错误,我想内存占用不应该只增不降,应该是本人代码的问题,但不知如何下手去查,请各位老师指点,谢谢了……
内存溢出
1、检查代码是否open了本地IO,而且没有及时release
2、检查代码是否存在不合理的递归程序
3、文件(图片)上传程序是否有问题?
4、应用是否包含了较大的对象(如包含超大文本),而且被单例实例持续引用着
5、最后用JProfile跟踪下类的实例引用情况
6、最笨的办法就是停止所有功能,然后逐个加上去并排查。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。