錯誤提示:OutOfMemoryError: PermGen space
永久保存區域溢出
PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域。這一部分用於存放Class和Meta的信息,Class在被 Load的時候被放入PermGen space區域,它和和存放Instance的Heap區域不一樣,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,因此若是你的APP會LOAD不少CLASS的話,就極可能出現PermGen space錯誤。這種錯誤常見在web服務器對JSP進行pre compile的時候。但目前的hibernate和spring項目中也很容易出現這樣的問題。
通常是加大-XX:PermSize -XX:MaxPermSize 來解決問題。
-XX:PermSize永久保存區域初始大小
-XX:PermSize永久保存區域初始最大值
修改tomcat內存大小的配置:
1.對於解壓縮版本的tomcat
在tomcat目錄下bin\catalina.bat文件中
remGuessCATALINA_HOMEifnotdefined setCURRENT_DIR=%cd%後面添加:
setJAVA_OPTS=-Xms256m-Xmx512m -XX:PermSize=128M-XX:MaxNewSize=256m -XX:MaxPermSize=256m-Djava.awt.headless=true
若是用startup.bat啓動tomcat,設置生效.
可是若是不是執行startup.bat啓動tomcat而是利用windows的系統服務啓動tomcat服務,上面的設置就不生效了,須要修改註冊表中的信息
2.對於安裝版的tomcat
須要修改註冊表中的信息
修改註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\JavaOptions
原值爲
-Dcatalina.home=E:\Tomcat 6.0
-Dcatalina.base=E:\Tomcat 6.0
-Djava.endorsed.dirs=E:\Tomcat 6.0\common\endorsed
-Djava.io.tmpdir=E:\Tomcat 6.0\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=E:\Tomcat 6.0\conf\logging.properties
加入-XX:PermSize=128M
-XX:MaxPermSize=512M (該值若大於實際內存也會提示錯誤,且實際可分配的內存要小於總內存,由於硬件也佔有部份內存)
重起tomcat服務,設置生效java