【问题标题】:how to find the class causing memory leak?如何找到导致内存泄漏的类?
【发布时间】:2016-01-26 14:04:09
【问题描述】:

我们在堆大小为 512M 的 IBM J9 VM 上运行 weblogic 服务器。

今天,服务器因 OutOfMemory 错误而失败。

我用 Eclipse 内存分析器打开了堆转储文件 xxx.phd(并且安装了 IBM DTFJ 插件以支持 .phd 文件)。

MAT 给我这样的泄漏嫌疑报告:

One instance of "java.lang.Object[]" loaded by "<system class loader>" occupies 402,572,608 (74.86%) bytes. The memory is accumulated in one instance of "java.lang.String[][]" loaded by "<system class loader>".

如何找到创建这个大数组的类?

还是那些仍在使用这个大数组的类?

或任何帮助我识别大数组的提示?

【问题讨论】:

    标签: java eclipse memory memory-leaks


    【解决方案1】:

    最好的办法是使用分析器来查明内存泄漏的位置,因为许多不同的位置会耗尽 JVM 的内存并导致 OutOfMemory 异常。只有检查内存转储才能带您到此为止。

    【讨论】:

    • 我确定这是由于达到了堆空间限制。
    • 你可以尝试jmap创建一个直方图,它会更容易分析并且可以对内存泄漏提供一些见解。如果这是反复出现的问题,我建议您定期进行堆转储以查看差异。
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2018-09-08
    • 2015-07-06
    • 2014-06-07
    • 2013-11-20
    • 2011-10-28
    • 2016-01-18
    • 2012-12-13
    相关资源
    最近更新 更多