将大型hprof加载到jhat中

lia*_*iam 25 java heap jvm memory-leaks jhat

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

jvm耗尽内存会使堆积如此之大以至于无法将其加载到具有两倍ram的盒子上,这似乎有点愚蠢.有没有办法让这个运行,或可能摊销分析?

bro*_*chb 21

我会看一下eclipse内存分析器.这个工具很棒,而且我已经看过几个带有这个工具的Gig堆.关于该工具的好处是它在转储上创建索引,因此它不会立即全部存储在内存中.


Joe*_*off 21

使用等效的jhat -J-d64 -J-mx16g myheap.hprof命令来启动jhat,即,这将以64位模式启动jhat,最大堆大小为16千兆字节.

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


小智 5

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

  • 谨慎分享工具或详细说明如何编写类似的工具? (14认同)