我有一个6.5GB的Hprof文件,它是由一个64位JVM使用-XX:-HeapDumpOnOutOfMemoryError选项转储的。我把它放在一个16GB的64位机器上,并试图把它放入jhat,但它总是内存不足。我试着为最小设置传递jvm参数,但它拒绝任何最小值,似乎在达到最大值之前内存不足。一个jvm耗尽内存转储一个如此之大的堆,以至于它不能被装载到一个有两倍内存的机器上,这看起来有点愚蠢。有什么方法可以让它运行,或者可能摊销分析吗?
-XX:-HeapDumpOnOutOfMemoryError
6kkfgxo01#
使用相当于jhat -J-d64 -J-mx16g myheap.hprof的命令来启动jhat,也就是说,这将在64位模式下启动jhat,最大堆大小为16 GB。如果平台上的JVM默认为64位模式操作,则不需要-J-d64选项。
jhat -J-d64 -J-mx16g myheap.hprof
-J-d64
lxkprmvk2#
我会看一下eclipse memory analyzer。这个工具很棒,我已经看过几个Gig堆w/这个工具。这个工具的优点是它在转储上创建索引,所以它不会一次全部在内存中。
pn9klfpd3#
我不得不加载一个11 GB的hprof文件,而Eclipse内存分析器却不能。我最后做的是编写一个程序,通过随机删除示例信息来减少hprof文件的大小。一旦我把hprof文件的大小减少到1GB,我就可以用Eclipse内存分析器打开它,并获得导致内存泄漏的线索。
czfnxgou4#
您传递给jhat的标志是什么?确保您处于64位模式,并且您设置的堆大小足够大。
4条答案
按热度按时间6kkfgxo01#
使用相当于
jhat -J-d64 -J-mx16g myheap.hprof
的命令来启动jhat,也就是说,这将在64位模式下启动jhat,最大堆大小为16 GB。如果平台上的JVM默认为64位模式操作,则不需要
-J-d64
选项。lxkprmvk2#
我会看一下eclipse memory analyzer。这个工具很棒,我已经看过几个Gig堆w/这个工具。这个工具的优点是它在转储上创建索引,所以它不会一次全部在内存中。
pn9klfpd3#
我不得不加载一个11 GB的hprof文件,而Eclipse内存分析器却不能。我最后做的是编写一个程序,通过随机删除示例信息来减少hprof文件的大小。一旦我把hprof文件的大小减少到1GB,我就可以用Eclipse内存分析器打开它,并获得导致内存泄漏的线索。
czfnxgou4#
您传递给jhat的标志是什么?确保您处于64位模式,并且您设置的堆大小足够大。