13

在我的工作中,我们遇到了一个难以重现的 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文件。

在我看来,这些文件中应该包含一些有用的、可访问的信息。有什么工具可以读取那里的内容吗?

感谢您的时间!

4

2 回答 2

2

分析迄今为止我遇到的转储文件的最佳选择是 vim 之类的文本编辑器。

于 2017-06-27T15:14:58.573 回答
-2

使用 Jpofiler(https://www.ejtechnologies.com/products/jprofiler/overview.html)。它不是免费的,但有试用期。

实时内存和 CPU 视图选项是隔离问题的最佳选择。即使在大型转储上,它通常也运行得相当好。

于 2017-06-23T22:31:22.767 回答