У меня есть приложение, которое работает на Amazon EC2 (с использованием нескольких продуктов AWS, таких как S3, DynamoDB и т. Д.) И имеет утечку памяти. Я собрал несколько дампов кучи и прогнал их с помощью Eclipse Memory Analyzer Tool, который определил несколько сотен экземпляров sun.security.ssl.SSLSocketImpl
(занимающих десятки МБ памяти) как вероятные утечки.
Однако мне сложно понять, почему эти SSLSocketImpl
объекты не были утилизированы.
большинство экземпляров SSLSocketImpl
в дампах имеют две ссылки: одну из java.lang.ref.Finalizer
, а другую - из com.amazonaws.internal.SdkSSLSocket
. поток финализатора в моем дампе кучи сообщается как бездействующий, без объектов, ожидающих завершения. но объекты com.amazonaws.internal.SdkSSLSocket
, которые ссылаются на утечку SSLSocketImpl
объектов, похоже, были очищены. по крайней мере, я не могу их найти на свалке (вид Dominator в MAT).
Я новичок в анализе дампов кучи java. что мне искать дальше? если объекты Amazon SdkSSLSocket
действительно были очищены, почему объекты SSLSocketImpl
также не были очищены?
Благодарность!