【发布时间】:2012-12-08 11:57:04
【问题描述】:
我有一个应用程序由于 OOME 而崩溃。我想在应用程序崩溃前不久创建一个堆的转储文件。我之前用jdump在运行了几个小时后分析了堆,但没有发现任何可疑之处。我可以在一些 Eclipse 分析器中运行该应用程序。是否有某种方法可以在 OOME 被抛出到具有正常(或 jdk)安装的服务器上之前不久创建堆转储?
【问题讨论】:
标签: java out-of-memory profiling heap-memory
我有一个应用程序由于 OOME 而崩溃。我想在应用程序崩溃前不久创建一个堆的转储文件。我之前用jdump在运行了几个小时后分析了堆,但没有发现任何可疑之处。我可以在一些 Eclipse 分析器中运行该应用程序。是否有某种方法可以在 OOME 被抛出到具有正常(或 jdk)安装的服务器上之前不久创建堆转储?
【问题讨论】:
标签: java out-of-memory profiling heap-memory
你可以使用-XX:+HeapDumpOnOutOfMemoryError
【讨论】:
如果您真的想在内存不足之前转储堆,您可以添加一个工作线程来定期轮询内存使用情况(请参阅freeMemory)。当您开始耗尽内存时,您转储堆。
请参阅https://blogs.oracle.com/sundararajan/entry/programmatically_dumping_heap_from_java,了解如何从您的应用程序中转储堆。
【讨论】: