Как исправить утечку SSLSessionImpl в Glassfish? - PullRequest
2 голосов
/ 17 июня 2010

Итак, в основном у меня Glassfish 2.1 и Java 1.6.0_15, и он будет работать в течение нескольких дней, но он съедает всю память, которую он может, по-видимому, независимо от того, насколько велика максимальная память. Это 32-битная jvm с максимальным объемом памяти в 4 ГБ, и он быстро использует все это, а затем сбрасывает с помощью сборщика мусора, повышая пропускную способность для сканирования. Поэтому после нескольких попыток я получил дамп кучи 3 ГБ и открыл его с помощью YourKit.

На этом сервере используется клиент Swing, который выполняет несколько вызовов RMI и некоторые вызовы REST https, а также веб-сайт php, вызывающий множество служб REST https.

Показывает:

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

... и так далее. Ну и дела, куда делась память? О, 3 миллиона экземпляров SSLSessionImpl, вот и все.

Кажется, что все вызовы https вызывают накопление этих объектов SSLSessionImpl, но в этом случае они никогда не обрабатываются GC. Глядя на них в YourKit, финализатор - это корень GC. Покопаясь в Интернете, это очень похоже на http://forums.sun.com/thread.jspa?threadID=5266266 и http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=80df6098575e8599df9ba5c9edc1?bug_id=6386530

Куда мне идти дальше? Как мне докопаться до этого?

1 Ответ

2 голосов
/ 16 июля 2010

Похоже, что это сейчас исправлено с обновлением до последней JVM. 1.6.0_18 исправляет ошибка 4918870 , которая связана с этим.До обновления JVM у меня было несколько дампов кучи с 100 000-4 000 000 SSLSessionImpl, сейчас их обычно меньше 5000.

...