2011-10-07 18 views
1

我試圖將我的應用程序部署到Tomcat,但一直未能這樣做。我經常不斷收到OutofMemoryError的permgen空間。 我曾嘗試過各種命令行開關(搜查與本計算器上不同的問題)像-XX:MaxPermSize參數,-XX:PermSize,-XX:+ CMSClassUnloadingEnabled,-XX:+ CMSPermGenSweepingEnabledTomcat:傳遞-XX:MaxPermSize沒有可見的效果

我給PermGen的大小爲64 ,128,256,512,但它們都不起作用。

有趣的是,當我收到錯誤時,我在任務管理器中看到java進程只佔用大約300mb的內存。我傳遞-Xms爲1024m,但內存消耗仍然在300mb左右。

尋找關於可能是什麼原因的意見?

我的系統細節: 戴爾Latitude 5420 Win XP的32位 4 GB RAM

+2

你的確切命令行是什麼? – Stephen

+0

同上@Stephen評論,但另外還請包括您使用的Java版本和日誌文件中的錯誤消息。 – Perception

+0

我正在運行Tomcat 7.0.21,jdk 1.6.0_26,我在catalina.bat中添加了以下內容JAVA_OPTS =%JAVA_OPTS%-XX:MaxPermSize = 512m -XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled -Xms 1024m -Xmx 1024m。 。我啓動tomcat使用startup.bat – Manish

回答

-1

-Xms=1024意味着起始內存是1024,但隨後,在不需要的時候就縮水了。

0

當你說「不斷」,你的意思是你連續做了幾次重新裝配之後?如果是的話,這是Tomcat的一個衆所周知的缺陷,你無法做任何事情。越來越多的發電空間只會推遲不可避免的。

原因是反射動態地創建類,最終在perm gen空間中,永遠不會被回收。因此,名字'燙髮' - 這是垃圾收集器不接觸的永久代。

保護法律告訴您,如果您的容量有限,而您只能在不移除的情況下添加它,那麼您最終將用完容量。這就是你在這裏發生的事情。

+0

我沒有做重新裝配。該錯誤僅在啓動時看到(在第一次)。 – Manish

0

除了烏Fholl的回答是:爲最大堆正確的參數IST -Xmx1024M

0

Tomcat的需要環境變量JAVA_OPTS。例如:

JAVA_OPTS="-XX:MaxPermSize=256m -Xms250m -Xmx650m"