26

我有一个 64 位 JVM 使用该-XX:-HeapDumpOnOutOfMemoryError选项转储的 6.5GB Hprof 文件。我把它放在一台 16GB 的 64 位机器上,并试图将它放入 jhat,但它总是内存不足。我曾尝试传入 jvm args 以获得最小设置,但它拒绝任何最小值,并且似乎在达到最大值之前内存不足。

内存不足的 jvm 会转储一个如此大的堆,以至于无法将其加载到具有两倍内存的盒子上,这似乎有点愚蠢。有没有办法让这个运行,或者可能摊销分析?

4

4 回答 4

24

使用等价的jhat -J-d64 -J-mx16g myheap.hprofas 命令启动 jhat,即,这将以 64 位模式启动 jhat,最大堆大小为 16 GB。

如果您平台上的 JVM 默认为 64 位模式操作,则该-J-d64选项应该是不必要的。

于 2010-12-03T00:51:42.077 回答
22

我会看看eclipse 内存分析器。这个工具很棒,我用这个工具查看了几个 Gig 堆。该工具的好处是它在转储上创建索引,因此它不会一次全部在内存中。

于 2009-12-02T21:58:55.743 回答
5

我必须加载一个 11 GB 的 hprof 文件,并且不能使用 eclipse 内存分析器。我最终做的是编写一个程序,通过随机删除实例信息来减小 hprof 文件的大小。一旦我将 hprof 文件的大小降低到 1GB,我就可以使用 eclipse 内存分析器打开它,并了解导致内存泄漏的原因。

于 2011-09-15T15:13:41.540 回答
-2

你将什么标志传递给 jhat?确保您处于 64 位模式并且将堆大小设置得足够大。

于 2009-12-02T21:01:58.840 回答