2010-06-16 71 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个实例。