有没有办法分析截断的Java堆转储(hprof文件)?
2022-09-04 23:37:13
在我的工作中,我们遇到了一个难以重现的OOM问题。或者,更准确地说,在一个系统上很容易复制,使该系统无法使用,但很难在其他任何地方复制,给定相同的输入。
应用程序使用服务包装器作为服务运行。我们确实设法更改了配置以启动它,并可以选择在OOM上输出堆转储文件,但不幸的是,它们被截断了,很可能是由于服务包装器超时并在写入文件时杀死进程。这是显而易见的,因为最大内存设置为1GB,而hprof文件小至700MB,这太小了,无法成为OOM上的整个堆。
另外配置包装器以给java进程更长的时间来写出堆需要很多跳跃,但是我们正在使用以下2个选项来追求这一点:
wrapper.jvm_exit.timeout=600
wrapper.shutdown.timeout=600
问题是,对于我拥有的截断的hprof文件,我能做些什么有用的事情吗?Eclipse MAT窒息在他们身上。Jhat 似乎加载了它们,但随后只显示了大小为 0 的 Java.Object 的 3 个实例,而没有显示其他任何内容。我尝试了YourKit,它无法写入其oids文件。
在我看来,这些文件应该有一些有用的,可访问的信息。有没有一个工具可以读取那里有什么?
感谢您抽出宝贵时间接受采访!