近日来系统每天发生一次内存溢出,后台日志如下:
An exception or error occurred in the container during the request processing
java.lang.OutOfMemoryError: PermGen space
停止服务后,再启动服务,仍然无法访问系统
重启服务器后,再启动服务,可以正常访问系统
经排查优化部分的代码(原来这部分的代码由多个人书写,比较混乱,怀疑存在死循环)后,确认其他代码没有死循环和资源释放正常。重新设置tomcat的PermGen静态内存大小后程序基本正常。
tomcat修改PermGen内存大小的步骤(linux环境):
1,被修改的文件:/opt/tomcat/bin/catalina.sh
2,在catalina.sh中增加以下语句:
# -----------------------------------------------------------------------------
JAVA_OPTS="-Xms256m -Xmx1024m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m"
# OS specific support. $var _must_ be set to either true or false.
注意:第一个“=”两边不能含有空格,否则设置无效
可以使用jstat命令观察perm区的情况,命令如下:
jstat -gcold -t 7077 1000 7