我在Java
和OpenJDK
上运行了CentOS
个应用程序的服务器。
然而,应用程序似乎每隔几周就会发生内存泄漏并崩溃。
问题是虽然指定了HeapDumpOnOutOfMemoryError
,但是没有生成堆转储。
如果我创建了一个人工内存泄漏,它会立即崩溃应用程序,从而生成正确的堆转储。
现在我不要求一个完整的解决方案来解决这个问题,但需要一个好的策略。
例如,有一种方法可以在应用程序运行一周后按需提取堆转储吗?有没有办法弄明白OpenJDK
出了什么问题?对于如何处理此问题,您有其他建议吗?
答案 0 :(得分:1)
OpenJDK应该包含一个名为jmap
的工具,它可以在给定进程ID的情况下创建堆转储。要获得确切的语法,您必须查看jmap man page。如果存在内存泄漏,那么即使在应用程序崩溃之前,这应该在堆转储中可见。我还建议eclipse memory analyzer浏览堆转储并获取泄漏嫌疑人列表。