最近做項目碰到了讓我糾結的問題幢炸,tomcat服務器運行一段時間,總是會自動報異常:java.lang.OutOfmemoryError: PermGen Space 的錯誤,導致項目無法正常運行赊琳。
介紹:
PermGen Space:指的是內存的永久保存區(qū),該塊內存主要是被JVM用來存放 class 和 mete 信息的砰碴,當 class 被加載 loader 的時候就會被存儲到該內存區(qū)中躏筏,與存放類的實例的heap區(qū)不同,java中的 垃圾回收器GC 不會在主程序運行期對 PermGen space 進行清理呈枉。
原因:
當我們的應用中有很多的class時趁尼,很可能就會出現PermGen space的錯誤。
我們的 tomcat 在重啟的時候碴卧,不是使用的 ./bin/shutdown.sh 而是使用 kill -9 xxx 直接殺掉弱卡,這樣的話,存在 PermGen space 里面的內存不會被釋放的住册,這樣多長進行 kill 之后婶博,就會導致系統(tǒng)的內存被漸漸吃完了,直到最后 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時管用,但使用IDEA時不管用叹阔。
- 第二種方法:修改IDEA的Run Configurations挠轴。
點擊“Run”-"Run Configurations",在打開的窗口中點擊“Arguments”選項卡。
在VM arguments中內容最下邊輸入:
-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
保存后再次重啟后已經不再報錯了耳幢。