Last active
July 24, 2020 13:44
-
-
Save bric3/c9a1513e576731a4967834b08c7bb79c to your computer and use it in GitHub Desktop.
Trigger GC logs programmatically
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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