1

jhat 是分析 Java 堆转储的好工具,但对于大型堆,它很容易浪费大量时间。给 jhat 的运行时堆太小,可能需要 15 分钟才能失败并耗尽内存。

我想知道的是:根据 heapdump 文件的大小,我应该给 jhat 多少 -Xmx 堆是否有经验法则?现在只考虑二进制堆转储。

一些非常有限的实验表明它至少是堆转储大小的 3-4 倍。我能够使用 -J-mx12G 分析一个三并更改千兆字节的堆文件。

有没有其他人有更确凿的实验数据,或者了解 jhat 在运行时如何表示堆对象?

数据点:

  • 该线程表示 5 倍的开销,但我对后期模型 jhats (1.6.0_26) 的实验表明它并没有那么糟糕
  • 该线程表示 ~10x 开销
  • 一位同事支持 10x 理论:2.5gb 堆文件失败并显示 -J-mx23G
  • 另一位同事获得了 6.7 GB 的转储以使用 30 GB 的堆,开销为 4.4 倍。
4

0 回答 0