我有一个6.5GB的Hprof文件,由64位JVM使用-XX:-HeapDumpOnOutOfMemoryError
选项转储。我把它放在一台16GB的64位机器上,并且我试图将它放入jhat,但它一直在耗尽内存。我试过传递jvm args以获得最小设置,但它拒绝任何最小值,并且在达到最大值之前似乎耗尽内存。
jvm耗尽内存会使堆如此之大以至于无法将其加载到具有两倍ram的盒子上,这似乎有点愚蠢。有没有办法让这个运行,或者可能分摊分析?
答案 0 :(得分:21)
我会看一下eclipse memory analyzer。这个工具很棒,而且我已经看过几个带有这个工具的Gig堆。关于该工具的好处是它在转储上创建索引,因此它不会立即全部存储在内存中。
答案 1 :(得分:20)
使用等效的jhat -J-d64 -J-mx16g myheap.hprof
作为命令启动jhat,即,这将以64位模式启动jhat,最大堆大小为16 GB。
如果您平台上的JVM默认为64位模式操作,则不需要-J-d64
选项。
答案 2 :(得分:5)
我必须加载一个11 GB的hprof文件,而不能使用eclipse内存分析器。我最终做的是编写一个程序,通过随机删除实例信息来减小hprof文件的大小。一旦我将hprof文件的大小减小到1GB,我就可以用eclipse内存分析器打开它,并获得导致内存泄漏的原因。
答案 3 :(得分:0)
你传递给jhat的旗帜是什么?确保您处于64位模式,并且您将堆大小设置得足够大。