有没有办法分析截断的Java堆转储(hprof文件)?

时间:2017-06-16 20:49:43

标签: java hprof eclipse-memory-analyzer yourkit jhat

在我的工作中,我们遇到了难以重现的OOM问题。或者,更准确地说,它很容易在一个系统上重现,使得该系统无法使用,但在相同输入的情况下难以在其他任何地方重现。

使用服务包装器将应用程序作为服务运行。我们确实设法更改配置以启动它,并选择在OOM上输出堆转储文件,但不幸的是,它们被截断,很可能是由于服务包装器超时并在写入文件时终止进程。这很明显,因为最大内存设置为1GB,而hprof文件小到700MB,这对于OOM来说太小而不是整个堆。

需要花费大量资金来进一步配置包装器以使java进程有更长的时间来写出堆,但我们正在使用这两个选项来实现这一点:

wrapper.jvm_exit.timeout=600
wrapper.shutdown.timeout=600

问题是,我能用截断的hprof文件做些什么有用吗? Eclipse MAT扼杀它们。 Jhat似乎加载了它们,但随后只显示了3个大小为0的Java.Object实例。我试过YourKit,它无法写出它的oids文件。

在我看来,这些文件应该包含一些有用的,可访问的信息。有没有可以读取内容的工具?

感谢您的时间!

2 个答案:

答案 0 :(得分:1)

分析我遇到的转储文件的最佳选择是文本编辑器,如vim。

答案 1 :(得分:-1)

使用Jpofiler(this)。它不是免费的,但它有一个试用期。

实时内存和CPU视图选项是隔离问题的最佳选择。它通常在大型垃圾场上运行得相当好。