2010-06-16 110 views
2

所以基本的是我有GlassFish 2.1和Java 1.6.0_15,它會工作幾天,但它吃盡其所有的內存,看起來無論多大的最大內存設置。它是一個32位的jvm,最大內存現在爲4GB,並且它快速使用它,然後與垃圾收集器一起使用,從而帶來吞吐量的爬行。所以經過幾次嘗試後,我得到了一個3GB的堆轉儲,並用YourKit打開它。如何修復Glassfish中泄漏的SSLSessionImpl?

這個服務器上的用法是一個swing客戶端,它執行一些RMI調用和一些REST https調用,再加上一個調用大量REST https服務的php網站。

它顯示:

Name           Objects Shallow Size  Retained Size 
java.lang.Class        22,422  1,435,872  1,680,800,240 
java.lang.ref.Finalizer      3,086,366 197,527,424  1,628,846,552 
com.sun.net.sll.internal.ssl.SSLSessionImpl 3,082,887 443,935,728  1,430,892,816 
byte[]          7,901,167 666,548,672  666,548,672 

...等等。記者去了哪裏?噢,300萬個SSLSessionImpl實例,就是這樣。

看起來好像所有的https調用都會導致這些SSLSessionImpl對象累積,但它們從未被GC化過。在YourKit中查看它們,終結器是GC根。在網絡上瀏覽這看起來非常像http://forums.sun.com/thread.jspa?threadID=5266266http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=80df6098575e8599df9ba5c9edc1?bug_id=6386530

我該去哪裏?我如何才能達到這個底部?

+0

提交補丁:S – 2010-06-16 21:45:01

+0

那麼你是說這是你見過的一個問題? – Jim 2010-06-17 16:26:36

回答

2

這似乎現在已升級到最新的JVM。 1.6.0_18修復程序bug 4918870這與此有關。在升級JVM之前,我有幾個堆轉儲100,000-4,000,000個SSLSessionImpl,現在通常少於5000個實例。