用tomcat裏面的startup.bat開啓服務的時候,遇上PermGen Space問題

問題: 
最近做項目碰到了讓我糾結的問題,tomcat服務器運行一段時間,總是會自動報異常:Java.lang.OutOfmemoryError: PermGen Space 的錯誤,導致項目無法正常運行。

介紹: 
PermGen Space:指的是內存的永久保存區,該塊內存主要是被JVM用來存放 class 和 mete 信息的,當 class 被加載 loader 的時候就會被存儲到該內存區中,與存放類的實例的heap區不同,java中的 垃圾回收器GC 不會在主程序運行期對 PermGen space 進行清理

原因:

  1. 當我們的應用中有很多的class時,很可能就會出現PermGen space的錯誤。
  2. 我們的 tomcat 在重啓的時候,不是使用的 ./bin/shutdown.sh 而是使用 kill -9 xxx 直接殺掉,這樣的話,存在 PermGen space 裏面的內存不會被釋放的,這樣多長進行 kill 之後,就會導致系統的內存被漸漸吃完了,直到最後 tomcat 報錯。

解決方法:

              手動設置MaxPermSize的大小:

修改 TOMCAT_HOME/bin/catalina.bat文件
在echo "using CATALINA_BASE:$CATALINA_BASE"上面加入這一行內容:

set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128m -XX:MaxPermSize=512m
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章