經過幾天的調試,我成功地在Tomcat 6.0.32上成功地重新部署了一箇中型到大型Web應用程序,而沒有任何PermGen
泄漏。填滿後我看到PermGen
下降,並且類加載器被垃圾收集。用Jetty重新部署時解決PermGen問題7
經過多次的欣喜之後,我試着讓應用程序在我們的開發環境(它由Maven和Jetty插件組成)的無泄漏情況下重新部署。
不幸的是我似乎已經打了一個服務器不限於通過下面的截圖所示
Yourkit snapshot http://img811.imageshack.us/img811/7320/jettyclassloaderbeanelr.png
碼頭請求螺紋具有強引用一個BeanElResolver
這又具有很強的參考,以從多個類我的web應用程序。
我沒有發現如何刷新此信息。
如何從我的應用程序中刪除最終的PermGen
泄漏?
更新:
我已經做了以下來解決問題,沒有運氣:
- 更新到最新版本的插件碼頭的(包括7.4.5和8.0 .0.M3)
- 使用CMS集電極:
-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
更新2:
- 我彙報說,這個是Jetty的問題跟蹤了一個錯誤:maven-jetty-plugin: PermGen leak due to javax.el.BeanELResolver
我不明白你的措辭。 PermGen-Leak意味着什麼?您是否嘗試給虛擬機提供soem GC相關標誌,如:-XX:+ CMSPermGenSweepingEnabled -XX:+ CMSClassUnloadingEnabled? 當沒有連接/會話結束時,您是否期望完全收集正在運行的Web應用程序? –
Angel:默認情況下,您的servlet容器會在每次重新部署時泄漏類加載器。類定義是從永久代中分配的,所以你會得到一個PermGen泄漏。我印象深刻的OP設法繞過Tomcat 6這個問題,並沒有標誌。 –
Robert:請考慮告訴我們更多關於你如何修復Tomcat 6中的泄漏問題!我很想知道你做了什麼。維基,也許? –