【发布时间】:2017-04-21 08:03:57
【问题描述】:
我有一个在 Amazon EC2 上运行的应用程序(使用多个 AWS 产品,例如 S3、DynamoDB 等)并且存在内存泄漏。我收集了一些堆转储并通过 Eclipse 的内存分析器工具运行它们,该工具将数百个 sun.security.ssl.SSLSocketImpl 实例(占用数十 MB 内存)确定为可能的泄漏。
但我无法弄清楚为什么这些 SSLSocketImpl 对象没有被处理掉。
转储中SSLSocketImpl 的大多数实例都有两个引用,一个来自java.lang.ref.Finalizer,一个来自com.amazonaws.internal.SdkSSLSocket。我的堆转储中的终结器线程报告为空闲,没有等待终结的对象。但是引用了泄露的SSLSocketImpl 对象的com.amazonaws.internal.SdkSSLSocket 对象似乎已被清除。至少,我在堆转储中找不到它们(MAT 中的 Dominator 视图)。
我是分析 Java 堆转储的新手。接下来我应该寻找什么?如果亚马逊的SdkSSLSocket 对象确实被清理了,为什么SSLSocketImpl 对象没有被清理?
谢谢!
【问题讨论】:
-
你找到什么了吗?
-
从来没有找到这个问题的根源。它已经被搁置了几个月,因为部署新实例具有使内存泄漏成为非问题的副作用。
-
您使用了哪些 EC2 实例?
标签: java amazon-web-services memory-leaks heap-dump