【问题标题】:Heap dump memory leak堆转储内存泄漏
【发布时间】:2021-11-06 09:51:29
【问题描述】:

我无法找到内存泄漏的根本原因。我在堆转储中没有发现可疑的东西。

我看到byte[]char[] + int[] 消耗了最多的堆

在 Yourkit 中,我看到一些提示可以通过“线程局部变量”来完成内存泄漏:

在所有 threadLocals 中都有编码器 + 解码器 - 为什么?有什么原因吗?

请给出在哪里寻找问题的建议。

在线程转储中看到许多等待线程:

【问题讨论】:

    标签: java memory memory-leaks garbage-collection heap-memory


    【解决方案1】:

    您的转储中有 23502 个线程对象 (java.lang.Thread)。这远非正常。这些线程要么处于睡眠状态(您正在泄漏线程),要么处于死亡状态(但有些线程是从实时图表中引用的)。

    在前一种情况下,重新考虑您的线程使用情况,稍后选择一个死线程并使用“root 路径”操作来确定泄漏的根本原因。

    PS:通常情况下,对于内存泄漏的情况,您需要捕获两个堆转储并分析差异。

    【讨论】:

    • 从转储中显示的线程名称来看,问题似乎是创建了大量线程池,每个线程池有两个线程(甚至可能从未尝试关闭它们)......当然,用少量线程创建大量线程池与它们的使用方式相反。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2017-04-07
    • 2011-03-17
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多