tomcat內存溢出:PermGen space解決方法


最近集群服務器中的幾台服務器在半夜自動重啟tomcat后一段時間便都會報java.lang.OutOfMemoryError: PermGen space。

習慣性的百度,得到的答案基本上都是統一的解決辦法:

手動設置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m 

可是這段代碼已經在TOMCAT_HOME/bin/catalina.sh添加進去了(如下圖),它還是依舊報的這個錯誤

經過對比正常的服務器的配置和catalina.sh的配置,終於發現了問題:

從上圖我們可以看到,

“echo "Using CATALINA_BASE: $CATALINA_BASE"

這一行,以及新加入的

JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx1024m -XX:PermSize=10240m -XX:MaxPermSize=20480m"

這一行是在一個if語句里面,if語句上面有它的注釋

# Bugzilla 37848: only output this if we have a TTY

所以說當沒有TTY的時候if里面的語句是不會執行的,也就是說,問題可能就出現在這里。

通過ps aux|grep tomcat命令后發現TTY那一列輸出的是?,也就是說沒有TTY,后面也沒有打印出自定義的內存大小的信息,所以很明顯if里面的語句沒有執行到,還是默認的大小,所以java.lang.OutOfMemoryError: PermGen space

所以把加大內存配置的代碼放在其它地方,然后修改一下系統時間,讓tomcat重啟一下,再通過ps aux|grep tomcat命令查看,啟動參數已經有了修改的內存配置...一段時間后,tomcat也沒有溢出,問題應該是解決了...

Reference:

[1] http://blog.csdn.net/userwyh/article/details/44563233


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM