java.lang.OutOfMemoryError: PermGen space及其解決方法

mueclipse 在啓動tomcat後,在系統中還沒點幾下就報  java.lang.OutOfMemoryError: PermGen space 偶爾的話還可以接受但是經常出現這個問題,尤其是啓動時間比較長的工程是很影響開發效率的。在網上找了好久終於在別的博客裏的回覆裏找到了答案,以下是原文:


http://blog.csdn.net/fengyie007/article/details/1780375


解決OutOfMemoryError: PermGen space,過程是痛苦的,結果是舒暢的

最近自己的程序在Redeploy重新部署的時候,老提示OutOfMemoryError: PermGen space錯誤,在網絡上搜索了相關的資料,但是按照做後還是存在這個問題。由於我是第一次碰到這個問題,花費了我2天時間,過程比較痛苦,結果還是比較圓滿的。我將我的經歷寫下來,供我自己以後參考,也提供給大家分享。

在網絡上關於OutOfMemoryError: PermGen space的解決辦法很多了,但是有的辦法都是互相轉發,真假難辨。有的可能還產生誤導。

我的環境是Myeclips 8.5、tomcat6.x,試過了很多辦法後,比如:文檔《Linux 和 Windows修改Java虛擬機內存大小》(http://duanfei.iteye.com/blog/1189541),中的辦法,我都試過了,還是不行;當然還參考了很多其他資料,然後進一步研究JVM的優化等,我就是想知道我配置的內存參數應該夠大了,爲什麼還是溢出,難道沒有生效,那我就需要找到配置後系統認可的內存參數是多少,參考網絡上的知識,啓動了JDK自帶的工具,在\jdk1.6.0_10\bin下面的jconsole.exe內存監控的工具,點擊進入如下:選擇PID爲4472的這個進程,選擇內存頁,並且選擇圖表中最後一個選項的“內存池“Perm Gen”,下面的詳細信息顯示的是:
這個地方的最大值是65536Kb,也就是64M,我於是就找到原因了,64M肯定會導致溢出,但是我配置了幾百兆的內存空間就是不生效呢。注意,這個是我在myclipse中啓動的tomcat看到的結果。


接下來,我進入bin/catalina.bat文件中的“rem ----- Execute The Requested Command -”這個後面增加了下面的語句set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=512m,這個地方注意增加的位置是在rem ----- Execute The Requested Command –後面,最好set JAVA_OPTS=%JAVA_OPTS% 這個也要加上,這個網絡上好多文檔沒有將這個位置交代清楚,或者說的不是這個地方,是不是其他地方也可以,我沒有試。我手工啓動tomcat,在cmd狀態下輸入:startup,然後看jconsole.exe,明細Perm Gen的內存就是我配置的內存521M,是生效了的.
但是我在myclipse中啓動tomcat後,重新部署程序,錯誤依舊。原來文檔《Linux 和 Windows修改Java虛擬機內存大小》(http://duanfei.iteye.com/blog/1189541)中提到
如果是通過Myeclipse啓動Tomcat修改
Myeclipse配置選項 打開選項..輸入tomcat關鍵字,然後點開Server下面的JDK就會出現配置區域Optional Java VM arguments.


直接加入 -Xms128m -Xmx512m 
這個地方是有一個漏洞的,直接加入 “-Xms128m -Xmx512m ”,應該是“ -Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m”,這個是對myclipse生效的。如果沒有-XX:PermSize=256m -XX:MaxPermSize=512m,那麼PermGen的內存始終是64M。修改後,重啓tomcat,重新部署,內存不再溢出了。
我的機器上是:Servers/Tomcat/Tomcat 6.x/JDK 中的Optional Java VM arguments:
找到了原因,解決也就自然很簡單了。
注意這個地方Servers/Tomcat/Tomcat 6.x 這個地方還有一個參數:Optional program arguments,這個感覺作用不大,我也是修改後沒有什麼效果,我以爲修改這個地方就可以了,導致我走了彎路。

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