在部署項目時,將兩個應用部署到同一個tomcat下,通過startup.bat啟動服務時,控制台出現出現java.lang.OutOfmemoryError:PermGen Space 錯誤
服務器環境:
系統版本:windows server 2008 r2
安裝內存:64GB
處理器:8核(具體型號記不得了)
PermGen Space:全稱是Permanent Generation Space,是指內存的永久保存區域,這塊內存主要是被JVM存放Class和Meta信息的,class在被load時就會被放到PermGen Space中,它和存放類實例(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen Space進行清理,所以如果你的應用中有很多class的話,就很可能出現PermGen Space錯誤,這種錯誤常見在web服務器對jsp進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)就會出現該錯誤信息了。
經過實際驗證的解決辦法:修改catalina.bat文件內容,添加PermSize參數的設置,大小視具體情況而定:
修改前:
rem ----- Execute The Requested Command --------------------------------------- set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding="UTF-8" -Dsun.jnu.encoding="UTF8" -Ddefault.client.encoding="UTF-8" -Duser.language=Zh set JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -XX:MaxNewSize=512m
修改後:
rem ----- Execute The Requested Command --------------------------------------- set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding="UTF-8" -Dsun.jnu.encoding="UTF8" -Ddefault.client.encoding="UTF-8" -Duser.language=Zh set JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -XX:MaxNewSize=512m -XX:PermSize=256m -XX:MaxPermSize=512m
再次重啟tomccat,正常啟動。
下面是網絡上其他啟動方式和環境的解決方法,以備以後參考
1、eclipse開發環境
修改eclipse.ini文件
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms128m
-Xmx512m
-XX:PermSize=64M
-XX:MaxPermSize=128M
2、windows 服務方式啟動tomcat
修改注冊表
3、Linux系統
修改catalina.sh:
JAVA_OPTS="-Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m"