SSH部署到Tomcat內存溢出-OutOfMemoryError 的解決辦法

使用ssh集成項目後,部署幾回後會就會出現OutOfMemoryError PermGen space系統錯誤,經過在網上查閱資料,發現這個錯誤並非Tomcat的問題,而JVM設計自身的一個缺陷,JVM把內存分了不一樣的區, PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域,類加載的時候就存放在這個區域中。原本SUN設計的時候認爲這個區域在JVM啓動的時候就固定了,但他沒有想到如今動態會用得這麼普遍。並且這個區域有特殊的垃圾收回機制,如今的問題是動態加載類到這個區域後,gc根本沒辦法回收!

沒想到至今這個問題還沒未能解決,有人給出最好的解決方法是不使用JDK,使用BEA的JRokit,固然如今Oracle,BEA,SU已經成爲一家人了,我想這個問題應該會更快有更好的解決方案。linux

好了仍是說說如何解決問題吧,網上大量的資料說在tomcat這樣設置:SET JAVA_OPTS= -Xms64m -Xmx512m,但通過本人的測試,沒有一點做用,詳細看了JVM內存的分配機制後才知道,-Xms和--Xmx是調整Java heap space(即堆內存)的大小,ava heap space區域中存放對象,GC會收集這塊區域。tomcat

若是出現的異常類型是:OutOfMemoryError: Java heap space,那應該設置 SET JAVA_OPTS= -Xms64m -Xmx512m。eclipse

若是出現的異常類型是:OutOfMemoryError  PermGen space,那應該設置set JAVA_OPTS=-Xms128m -Xmx512m  -XX:PermSize=128M -XX:MaxPermSize=256mssh

常見的有兩種設置方法:測試

若是在開發環境中啓動tomcat,以eclipse爲例:選擇window->Preferences->MyEclipse-servers-Tomcat->JDK 在右側框Optional Java  VM arguments中加入:-Xms128m -Xmx512m  -XX:PermSize=128M -XX:PermSize=256Mspa

若是獨立啓動tomcat,修改tomcat/bin/catalina.bat文件,查找set JAVA_OPTS,找到後把這一行修改成:設計

set JAVA_OPTS=-Xms128m -Xmx512m  -XX:PermSize=128M -XX:MaxPermSize=256M,設置的時候要注意:-Xms+X:PermSize不能大於系統支持的最大JVM的大小。具體大小根據本身內存大小調整吧。server

相關文章
相關標籤/搜索