如何修复Glassfish中泄漏的SSLSessionImpl?

时间:2010-06-16 21:26:42

标签: memory-leaks glassfish

所以基础是我有Glassfish 2.1和Java 1.6.0_15它会工作几天但它会占用所有内存,似乎无论最大内存设置多高。它是一个32位的jvm,最大内存现在为4GB,它可以快速使用它,然后与垃圾收集器一起使用,从而使吞吐量达到爬行状态。所以经过几次尝试后,我得到了一个3GB的堆转储并用YourKit打开它。

此服务器上的用法是执行一些RMI调用和一些REST https调用的swing客户端,以及调用大量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

我下一步去哪儿?我如何深入了解这一点?

1 个答案:

答案 0 :(得分:2)

现在,通过升级到最新的JVM,这似乎已得到修复。 1.6.0_18修正了与此相关的bug 4918870。在升级JVM之前,我有几个堆转储,其中包含100,000-4,000,000个SSLSessionImpl,现在通常少于5000个实例。