我有一台服务器在和上运行Java
应用程序。OpenJDK
CentOS
但是,该应用程序似乎每隔几周就会发生内存泄漏和崩溃。问题是尽管HeapDumpOnOutOfMemoryError
指定了没有堆转储生成。如果我创建了一个导致应用程序立即崩溃的人为内存泄漏,则会生成适当的堆转储。
现在我要求的不是这个问题的完整解决方案,而是一个好的策略。
例如,有没有办法在应用程序运行一周后按需提取堆转储?有没有办法弄清楚出了什么问题OpenJDK
?您对如何解决这个问题有任何替代建议吗?
OpenJDK 应该包含一个名为的工具,该工具jmap
可以在给定进程 ID 的情况下创建堆转储。对于确切的语法,您必须查看jmap 手册页。如果存在内存泄漏,那么即使在应用程序崩溃之前,这也应该在堆转储中可见。我还可以推荐eclipse 内存分析器来浏览堆转储并获取泄漏嫌疑人列表。