【问题标题】:Running out of memory while analyzing a Java Heap Dump分析 Java 堆转储时内存不足
【发布时间】:2011-02-28 18:08:34
【问题描述】:

我有一个奇怪的问题,我需要分析一个大小为 1.5GB 的 Java 堆转储(来自 IBM JRE),问题是在分析转储时(我尝试过 HeapAnalyzer 和 @987654322 @) 工具内存不足我无法真正分析转储。我的机器中有 3GB 的 RAM,但似乎不足以分析 1.5GB 的转储,

我的问题是,您知道我可以使用我拥有的内存量运行的特定堆转储分析工具(支持 IBM JRE 转储)吗?

谢谢。

【问题讨论】:

  • 当您运行这些工具时,JVM 设置的最大堆大小是多少?确保将其设置为至少 2GB。
  • 我一直在操作该设置,实际上我在启动工具时能够使用的最大值是我的机器上的 1600 MB (-Xmx1600m),如果我指定更大的值,我会得到一个指定无法分配请求的内存量的错误。
  • 借用64位机器半小时。
  • 是的,你需要一个 64 位的 JVM 和 cpu。

标签: java memory-leaks profiling


【解决方案1】:

试试 SAP 内存分析器工具,它还有一个 eclipse plugin。此工具在处理转储文件时在磁盘上创建索引文件,并且比其他选项需要更少的内存。我很确定它支持较新的 IBM JRE。话虽如此 - 对于 1.5 GB 转储文件,您可能别无选择,只能运行 64 位 JVM 来分析此文件 - 我通常估计大小为 n 的堆转储文件需要 5*n 内存使用标准工具打开,3*n 内存使用 MAT 打开,但你的里程会根据转储实际包含的内容而有所不同。

【讨论】:

  • 同意 MAT。我已经能够打开 1.5Gb 堆转储,但它在具有 4GB 内存的机器上使用 64 位 JVM。
  • 我可以在 Linux 机器上运行 MAT,这个是 32 位机器,但看起来 Linux 实际上能够处理 3GB 的进程(我使用了 -Xmx3000m),我终于可以了解析转储,现在我可以从 Windows 进行分析 =)
【解决方案2】:

在 3GB RAM 上分析 1.5GB 堆转储会很困难。因为在这 3GB 中,您的操作系统、其他进程、服务……很容易占用 0.5 GB。所以你只剩下2.5GB。 heapHero 工具在分析堆转储方面非常有效。它应该只需要比堆转储的大小多 0.5GB 来分析。你可以试一试。但最好的建议是在具有足够内存的机器上分析堆转储,或者您可以在分析堆转储期间获取 AWS ec2 实例。分析堆转储后,您可以终止实例。

【讨论】:

    猜你喜欢
    • 2019-12-16
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多