nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

Javaプログラムで自分自身のヒープダンプを吐く

自分で喉に指突っ込むみたいなアレですが、メモリリーク単体テスト書いててこのタイミングでヒープダンプ取りたいなー、というユースケースがあったので。

String heapDumpFilename = "heap.bin";
boolean liveOnly = true;

MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName name = ObjectName.getInstance("com.sun.management:type=HotSpotDiagnostic");
String operation = "dumpHeap";
Object[] params = { heapDumpFilename, liveOnly };
String[] sig = { "java.lang.String", "boolean" };
server.invoke(name, operation, params, sig);