2013-09-01 22 views
3

我使用Tomcat部署Web應用程序枝條下面PermGen的配置:Tomcat的內存使用量(PermGen的)

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 
-server -Xms1536m -Xmx1536m 
-XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
-XX:MaxPermSize=256m -XX:+DisableExplicitGC" 

請我想了解以下內容:

  1. 由所使用的全部內存Tomcat應該是256MB或Tomcat因其他原因消耗其他內存?
  2. 如何監控Tomcat使用的內存以避免達到PemGen max的大小?

同時也請注意,我有3個雄貓與以前同樣的PermGen的配置,8 GB RAM的同一物理服務器上運行,這使得我怕增加PermGen的最大尺寸爲512MB不影響物理服務器內存。

回答

3

PermGen的OOMEs在Tomcat中通常是因爲兩件事情的組合:

  • 熱重新部署。

  • 內存泄漏,其中一些引用導致舊的類加載器及其所有依賴對象保持可到達狀態。

因此,有一對夫婦的方式來避免這個問題:

  • 不要做熱重新部署。或者重新啓動每一次熱點重新部署。

  • 追蹤並修復與類加載器相關的存儲泄漏。

增加permgen大小不會防止問題,但它可能會增加OOME問題之間的時間間隔。 (或者讓你做一個完整的Tomcat關機/重啓較少。)


你的問題:

1)是Tomcat使用整個存儲應該是256MB或Tomcat佔用其他內存其他原因?

參見上文。它不是特別的Tomcat,儘管Tomcat特別傾向於這個。 (顯然,Hibernate可以過......由於,我相信,它使用動態代理的。)

2)如何監控使用Tomcat來避免達到PemGen最大尺寸的內存?

有一些方法可以監視內存使用情況;例如附加一個代理。但是,這些不會阻止問題。國際海事組織,更改您的生產服務器的管理程序會更簡單一些,因此您不需要進行熱重新部署。

+0

非常感謝斯蒂芬,這非常有用。 – Abdullah

+0

@Stephen你能否解釋爲什麼熱點重新造成這個問題? – mosaad

+0

熱重新部署會導致創建新的類加載器。如果存在與類加載器相關的存儲泄漏,則泄露泄露。 –

0

Tomcat需要增加permgen不是爲了自己的需要,而是因爲它可以運行多個webapps,它們都會加載自己的類(permgen主要用於存儲類)。你可以使用jconsole util查看內存使用情況,進入內存 - >圖表 - >內存池Perm Gen.對於我剛開始時沒有用戶webapps的Tomcat 7,它顯示65M最大6M使用。