package org.gridkit.jvmtool.gcflow; import java.io.IOException; import java.lang.management.ManagementFactory; import java.util.Collection; import java.util.Map; import java.util.concurrent.Callable; import java.util.logging.Level; import java.util.logging.LogManager; import org.gridkit.jvmtool.gcflow.GcKnowledgeBase.PoolType; import org.gridkit.nanocloud.CloudFactory; import org.gridkit.vicluster.ViManager; import org.gridkit.vicluster.ViNode; import org.gridkit.vicluster.ViProps; import org.gridkit.vicluster.telecontrol.jvm.JvmProps; import org.junit.AfterClass; import org.junit.Assume; import org.junit.BeforeClass; import org.junit.Test; public class GcKnowledgeBaseCheck { public static ViManager cloud = CloudFactory.createCloud(); @BeforeClass public static void logOff() { LogManager.getLogManager().getLogger("").setLevel(Level.OFF); } @BeforeClass public static void initCloud() { ViProps.at(cloud.node("**")).setLocalType(); JvmProps.at(cloud.node("**")).addJvmArg("-Djava.util.logging.config.class=" + LogOff.class.getName()); } @AfterClass public static void killCloud() { cloud.shutdown(); } @Test public void classify_local() throws IOException { dumpMemoryPools(); } @Test public void classify_serial_gc() throws IOException { try { String gc = "-XX:+UseSerialGC"; ViNode jvm = cloud.node(gc); JvmProps.at(jvm).addJvmArg(gc); jvm.exec(new Callable<Void>() { @Override public Void call() throws Exception { dumpMemoryPools(); return null; } }); } catch(Exception e) { Assume.assumeTrue(false); } } @Test public void classify_par_new_gc() throws IOException { try { String gc = "-XX:+UseParNewGC"; ViNode jvm = cloud.node(gc); JvmProps.at(jvm).addJvmArg(gc); jvm.exec(new Callable<Void>() { @Override public Void call() throws Exception { dumpMemoryPools(); return null; } }); } catch(Exception e) { Assume.assumeTrue(false); } } @Test public void classify_ps_gc() throws IOException { try { String gc = "|-XX:+UseParallelGC|-XX:-UseParallelOldGC"; ViNode jvm = cloud.node(gc); JvmProps.at(jvm).addJvmArg(gc); jvm.exec(new Callable<Void>() { @Override public Void call() throws Exception { dumpMemoryPools(); return null; } }); } catch(Exception e) { Assume.assumeTrue(false); } } @Test public void classify_par_old_gc() throws IOException { try { String gc = "-XX:+UseParallelOldGC"; ViNode jvm = cloud.node(gc); JvmProps.at(jvm).addJvmArg(gc); jvm.exec(new Callable<Void>() { @Override public Void call() throws Exception { dumpMemoryPools(); return null; } }); } catch(Exception e) { Assume.assumeTrue(false); } } @Test public void classify_cms_def_new_gc() throws IOException { try { String gc = "|-XX:+UseConcMarkSweepGC|-XX:-UseParNewGC"; ViNode jvm = cloud.node(gc); JvmProps.at(jvm).addJvmArg(gc); jvm.exec(new Callable<Void>() { @Override public Void call() throws Exception { dumpMemoryPools(); return null; } }); } catch(Exception e) { Assume.assumeTrue(false); } } @Test public void classify_cms_par_new_gc() throws IOException { try { String gc = "|-XX:+UseConcMarkSweepGC|-XX:+UseParNewGC"; ViNode jvm = cloud.node(gc); JvmProps.at(jvm).addJvmArg(gc); jvm.exec(new Callable<Void>() { @Override public Void call() throws Exception { dumpMemoryPools(); return null; } }); } catch(Exception e) { Assume.assumeTrue(false); } } @Test public void classify_g1_gc() throws IOException { try { String gc = "-XX:+UseG1GC"; ViNode jvm = cloud.node(gc); JvmProps.at(jvm).addJvmArg(gc); jvm.exec(new Callable<Void>() { @Override public Void call() throws Exception { dumpMemoryPools(); return null; } }); } catch(Exception e) { Assume.assumeTrue(false); } } public static void dumpMemoryPools() throws IOException { Map<PoolType, Collection<String>> pools = GcKnowledgeBase.classifyMemoryPools(ManagementFactory.getPlatformMBeanServer()); for(PoolType pt: pools.keySet()) { System.out.println(pt.toString() + pools.get(pt)); } } }