近日來系統每天發生一次內存溢出,后臺日志如下:
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