idea運行時出現PermGen Space

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

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

原因:

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

第一種方法:修改tomcat/bin目錄下的catalina.bat。
在“rem ----- Execute The Requested Command ----------------------”下加入

JAVA_OPTS="-server -Xms800m -Xmx800m -XXNewSize=256M -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m" 。

這種方法在只使用tomcat時管用,但使用eclipse時不管用。

親測了第一種方式是可以的。

第二種方法:修改eclipse的Run Configurations。

點擊“Run”-“Run Configurations”,在打開的窗口中點擊“Arguments”選項卡。
在VM arguments中內容最下邊輸入:
-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
保存後再次重啓後已經不再報錯了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章