2011-07-25 59 views
6

經過幾天的調試,我成功地在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:

+0

我不明白你的措辭。 PermGen-Leak意味着什麼?您是否嘗試給虛擬機提供soem GC相關標誌,如:-XX:+ CMSPermGenSweepingEnabled -XX:+ CMSClassUnloadingEnabled? 當沒有連接/會話結束時,您是否期望完全收集正在運行的Web應用程序? –

+0

Angel:默認情況下,您的servlet容器會在每次重新部署時泄漏類加載器。類定義是從永久代中分配的,所以你會得到一個PermGen泄漏。我印象深刻的OP設法繞過Tomcat 6這個問題,並沒有標誌。 –

+0

Robert:請考慮告訴我們更多關於你如何修復Tomcat 6中的泄漏問題!我很想知道你做了什麼。維基,也許? –

回答

2

這是EL實現中的一個實際錯誤,它在最新的Jetty版本中得到了解決。

版本7.5.0一旦發佈,將包含修復程序。

0

不是直接回答你的問題,但你可能會考慮在開發中使用JRebel。有了JRebel,你大多不需要來重新部署,從而避免了泄漏泄漏和重新部署的浪費時間。它對我來說工作得非常好。

+0

我已經使用JRebel,但是a)我有時必須重新啓動,b)我的團隊中不是每個人都這樣做,所以我需要爲他們找到更好的解決方案。 –

相關問題