X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.modeling.tests%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Ftests%2Fcommands%2FWriteHeapDump.java;fp=bundles%2Forg.simantics.modeling.tests%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Ftests%2Fcommands%2FWriteHeapDump.java;h=18ab13a577b18644a092303f9bbb5ae13e1f3165;hb=ca6fcd858a0b82eb1b5a8f12c4d5df30e84393e0;hp=0000000000000000000000000000000000000000;hpb=67fd62f9c742337ec80eef658192db198a0efaac;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling.tests/src/org/simantics/modeling/tests/commands/WriteHeapDump.java b/bundles/org.simantics.modeling.tests/src/org/simantics/modeling/tests/commands/WriteHeapDump.java new file mode 100644 index 000000000..18ab13a57 --- /dev/null +++ b/bundles/org.simantics.modeling.tests/src/org/simantics/modeling/tests/commands/WriteHeapDump.java @@ -0,0 +1,69 @@ +package org.simantics.modeling.tests.commands; + +import java.io.File; +import java.io.IOException; +import java.lang.management.ManagementFactory; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import org.simantics.db.testing.common.CommandSequenceEnvironment; +import org.simantics.db.testing.common.WriteCommand; + +public class WriteHeapDump extends WriteCommand { + + private String fileName; + + public WriteHeapDump(String fileName) { + this.fileName = fileName; + } + + @Override + public void run(CommandSequenceEnvironment environment) throws Exception { + + final File dumpFile = new File(fileName); + if (dumpFile.exists() && !dumpFile.delete()) { + return; + } + try { + Object bean = getBean(); + if (bean == null) + return; + + Method m = bean.getClass().getMethod("dumpHeap", String.class, boolean.class); + m.invoke(bean, dumpFile.getAbsolutePath(), true); + } catch (IllegalArgumentException e) { + throw new InvocationTargetException(e); + } catch (IllegalAccessException e) { + throw new InvocationTargetException(e); + } catch (SecurityException e) { + throw new InvocationTargetException(e); + } catch (NoSuchMethodException e) { + throw new InvocationTargetException(e); + } + + } + + private static Object getBean() { + Class beanClass = getBeanClass(); + if (beanClass == null) + return null; + try { + Object bean = ManagementFactory.newPlatformMXBeanProxy( + ManagementFactory.getPlatformMBeanServer(), + "com.sun.management:type=HotSpotDiagnostic", + beanClass); + return bean; + } catch (IOException e) { + return null; + } + } + + private static Class getBeanClass() { + try { + Class clazz = Class.forName("com.sun.management.HotSpotDiagnosticMXBean"); + return clazz; + } catch (ClassNotFoundException e) { + return null; + } + } +} \ No newline at end of file