nested exception is java.lang.OutOfMemoryError: PermGen space


 

 生產環境:jdk1.6和tomcat6,部署了3個項目,而且用到大量的第三方jar包。在部署第四個項目的時候,運行了一天,第四個項目拋出java.lang.OutOfMemoryError:PermGen space。

        拋出異常java.lang.OutOfMemoryError: PermGen space 。網上查找資料,解釋為:

        PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域,這塊內存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGen space中,它和存放類實例(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的應用中有很多CLASS的話,就很可能出現PermGen space錯誤,這種錯誤常見在web服務器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那么就會產生此錯誤信息了。

        安裝版tomcat解決方法:手動設置MaxPermSize大小。網上多為修改配置文件的方式。我的操作系統是windows xp, 用tomcat本身提供的工具(Configure Tomcat)就可以設置。如下圖所示,在java options中加入紅色方框中的兩行語句即可。通過命令行參數-XX:PermSize和-XX:MaxPermSize設置該區域的大小,數值應根據機器實際內存大小來定。注:每行命令前后不要有空格,否則會導致tomcat啟動失敗。

 最近在公司做了一個j2ee+tomcat的小項目,涉及到tomcat加載類的內存配置,網上搜了半天,再經過自己總結,終於知道怎么一回事了,下面分享一下我的經驗,有不對的地方大家可以一起討論。

Tomcat的啟動分為startupo.bat啟動和注冊為windows服務的啟動,下面一一說明。

1.startup.bat啟動

在tomcat_home/bin目錄下找到catalina.bat,用文本編輯器打開,加上下面一行:

set JAVA_OPTS= -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=256M

放到rem ----- Execute The Requested Command ---------------------------------------下面即可。

解釋一下各個參數:

-Xms1024M:初始化堆內存大小(注意,不加M的話單位是KB)

-Xmx1029M:最大堆內存大小

-XX:PermSize=256M:初始化類加載內存池大小

-XX:MaxPermSize=256M:最大類加載內存池大小

-XX:MaxNewSize=256M:這個還不清楚哈,有知道的說聲

還有一個-server參數,是指啟動jvm時以服務器方式啟動,比客戶端啟動慢,但性能較好,大家可以自己選擇。

2.windows服務啟動

       如果你的tomcat是注冊為windows服務並且是以服務方式啟動的,那么上面的方法就無效了,因為這時tomcat啟動是讀取注冊表的參數,而不是讀取批處理文件的參數,這時我們有兩種方法來設置jvm參數。

第一種比較簡單,tomcat為我們提供了一個設置啟動參數的窗體,雙擊tomcat_home/bin目錄下的tomcat6w.exe,如圖

Tomcat啟動內存設置 - 一個人失眠 - 渴望

下方的Initial memory pool就是初始化堆內存大小,Maximun memory pool是最大堆內存大小。

而要設置Perm Gen池的大小就要在Java Option里面加參數了,在里面加上:

-Dcatalina.base=%tomcat_home%

-Dcatalina.home=%tomcat_home%

-Djava.endorsed.dirs=%tomcat_home%\endorsed

-Djava.io.tmpdir=%tomcat_home%\temp

-XX:PermSize=256M

-XX:MaxPermSize=256M

-XX:ReservedCodeCacheSize=48M

-Duser.timezone=GMT+08

(PS:網上說每一行后面不要有空格,沒試過)

第二種方法是打開注冊表->HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Java(路徑可能有一點點差別)

Tomcat啟動內存設置 - 一個人失眠 - 渴望

修改Options的值,把剛才上面那些參數加進去就OK了。(別忘了先備份一下注冊表)

原文地址:https://www.cnblogs.com/htys/p/4071393.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM