从应用程序内请求Java堆转储(核心转储)

时间:2009-11-30 10:02:56

标签: java monitoring coredump

我需要一种方法从应用程序中请求堆转储

理由:当我遇到特定的错误情况时,我想转储堆,以便我可以看到内存中的内容。

但是我想自动执行此操作(例如,当我检测到某些特定条件已经发生时。或者当看门狗不再获得它的ping时。当某些测试失败时)。因此,我需要一种从应用程序本身转储堆的方法。我似乎无法用MX bean找到它。虽然MX Beans可以通过监视器和“拥有同步器”信息,死锁和争用信息提供非常好的堆栈跟踪,但我似乎无法找到请求堆转储的方法。有没有这样的方式?或者通过一些间接方式,例如,这些JVisualVM的事情是如何做到的?并且可以告诉JVM在OutOfMemoryExceptions上转储核心。?

2 个答案:

答案 0 :(得分:16)

如果dump heap on OutOfMemoryError不够,那么如果可以的话,会有一个与HotSpot相关的programmatically dumping heap from Java applications方式。

答案 1 :(得分:4)

使用VM选项-XX:+HeapDumpOnOutOfMemoryError告诉HotSpot VM在内存不足时生成堆转储怎么样?