diff --git a/spectator-ext-jvm/build.gradle b/spectator-ext-jvm/build.gradle index fdebd29ed..3cf899c5a 100644 --- a/spectator-ext-jvm/build.gradle +++ b/spectator-ext-jvm/build.gradle @@ -55,5 +55,7 @@ def testJava17 = tasks.register('testJava17', Test) { javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(17) } + + jvmArgs '-XX:+UseG1GC' } check.dependsOn testJava17 diff --git a/spectator-ext-jvm/src/main/java/com/netflix/spectator/jvm/Jmx.java b/spectator-ext-jvm/src/main/java/com/netflix/spectator/jvm/Jmx.java index aec28f720..e28fa6dcf 100644 --- a/spectator-ext-jvm/src/main/java/com/netflix/spectator/jvm/Jmx.java +++ b/spectator-ext-jvm/src/main/java/com/netflix/spectator/jvm/Jmx.java @@ -27,6 +27,8 @@ import java.lang.management.ManagementFactory; import java.lang.management.MemoryPoolMXBean; import java.lang.management.ThreadMXBean; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; /** * Helpers for working with JMX mbeans. @@ -42,6 +44,15 @@ private Jmx() { * mbeans from the local jvm. */ public static void registerStandardMXBeans(Registry registry) { + if (JavaFlightRecorder.isSupported()) { + Executor executor = Executors.newSingleThreadExecutor(r -> { + Thread t = new Thread(r, "spectator-jfr"); + t.setDaemon(true); + return t; + }); + JavaFlightRecorder.monitorDefaultEvents(registry, executor); + return; + } monitorClassLoadingMXBean(registry); monitorThreadMXBean(registry); monitorCompilationMXBean(registry);