如果没有生成堆转储,则采用适当的策略

时间:2011-08-18 22:02:07

标签: java centos openjdk

我在JavaOpenJDK上运行了CentOS个应用程序的服务器。

然而,应用程序似乎每隔几周就会发生内存泄漏并崩溃。 问题是虽然指定了HeapDumpOnOutOfMemoryError,但是没有生成堆转储。 如果我创建了一个人工内存泄漏,它会立即崩溃应用程序,从而生成正确的堆转储。

现在我要求一个完整的解决方案来解决这个问题,但需要一个好的策略。

例如,有一种方法可以在应用程序运行一周后按需提取堆转储吗?有没有办法弄明白OpenJDK出了什么问题?对于如何处理此问题,您有其他建议吗?

1 个答案:

答案 0 :(得分:1)

OpenJDK应该包含一个名为jmap的工具,它可以在给定进程ID的情况下创建堆转储。要获得确切的语法,您必须查看jmap man page。如果存在内存泄漏,那么即使在应用程序崩溃之前,这应该在堆转储中可见。我还建议eclipse memory analyzer浏览堆转储并获取泄漏嫌疑人列表。