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

sto*_*vik 12 java monitoring coredump

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

基本原理:当我遇到特定的错误条件时,我想转储堆,这样我就可以看到内存中的内容了.

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

gus*_*afc 16

如果它不足以转储堆OutOfMemoryError,那么有一种以HotSpot为依据的方式以编程方式从Java应用程序转储堆,如果可以的话.