Skip to content

Instantly share code, notes, and snippets.

@bric3
Last active July 24, 2020 13:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bric3/c9a1513e576731a4967834b08c7bb79c to your computer and use it in GitHub Desktop.
Save bric3/c9a1513e576731a4967834b08c7bb79c to your computer and use it in GitHub Desktop.
Trigger GC logs programmatically
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
import javax.management.MBeanException;
import javax.management.MBeanInfo;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import java.lang.management.ManagementFactory;
public class TriggerGcLogsProgrammatically {
public static void main(String[] args) throws Exception {
// Arrays.stream(describeDiagnosticCommands().getOperations())
// .map(op -> op.getName() + " -> \n" + op.toString())
// .forEach(System.out::println);
System.out.printf("%s%n %s%n", "jcmd $(pidof java) VM.log what=gc*=debug decorators=uptime,tags,level output=stderr",
executeDiagnosticCommand(
"vmLog",
"what=gc*=trace",
"decorators=uptime,tags,level",
"output=stderr"));
System.out.printf("%s%n %s%n", "jcmd $(pidof java) VM.log list",
executeDiagnosticCommand(
"vmLog",
"list"));
}
private static String executeDiagnosticCommand(String operationName, String... params) throws MalformedObjectNameException, InstanceNotFoundException, MBeanException, ReflectionException {
var objectName = new ObjectName("com.sun.management:type=DiagnosticCommand");
var mbeanServer = ManagementFactory.getPlatformMBeanServer();
String[] signature = new String[]{String[].class.getName()};
return (String) mbeanServer.invoke(objectName,
operationName,
new Object[]{params},
signature);
}
private static MBeanInfo describeDiagnosticCommands() throws IntrospectionException, InstanceNotFoundException, ReflectionException, MalformedObjectNameException {
var objectName = new ObjectName("com.sun.management:type=DiagnosticCommand");
var mbeanServer = ManagementFactory.getPlatformMBeanServer();
return mbeanServer.getMBeanInfo(objectName);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment