From 8874dbf6e70bc27d125bed88907d717adac490ea Mon Sep 17 00:00:00 2001 From: Matthew Biscocho Date: Mon, 19 Oct 2026 16:06:05 -0400 Subject: [PATCH 1/2] Source CPU utilization metric from JFR instead --- .../org/apache/solr/metrics/OtelRuntimeJvmMetrics.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/solr/core/src/java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java b/solr/core/src/java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java index a5941b003fec..fe7ebefdd495 100644 --- a/solr/core/src/java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java +++ b/solr/core/src/java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java @@ -24,11 +24,13 @@ import io.opentelemetry.api.metrics.ObservableLongGauge; import io.opentelemetry.api.trace.TracerProvider; import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.instrumentation.api.config.IncludeExclude; import io.opentelemetry.instrumentation.runtimetelemetry.RuntimeTelemetry; import io.opentelemetry.instrumentation.runtimetelemetry.RuntimeTelemetryBuilder; import io.opentelemetry.instrumentation.runtimetelemetry.internal.Experimental; import java.lang.invoke.MethodHandles; import java.lang.management.ManagementFactory; +import java.util.List; import org.apache.lucene.util.SuppressForbidden; import org.apache.solr.common.util.EnvUtils; import org.apache.solr.metrics.otel.OtelUnit; @@ -84,6 +86,11 @@ public ContextPropagators getPropagators() { // solr.metrics.jvm.* system property instead of hardcoding true/true here. Experimental.setEmitExperimentalMetrics(builder, true); Experimental.setEmitExperimentalJfrMetrics(builder, true); + // A JDK bug, fixed in later releases, makes JMX return no system CPU utilization. + // So we get CPU utilization from JFR instead + Experimental.setJfrMetrics( + builder, + IncludeExclude.builder().setIncluded(List.of("jvm.system.cpu.utilization")).build()); this.runtimeMetrics = builder.build(); java.lang.management.OperatingSystemMXBean osMxBean = ManagementFactory.getOperatingSystemMXBean(); From 4c2d22d384fccc5a0aed274fe9f81fac55e543f5 Mon Sep 17 00:00:00 2001 From: Matthew Biscocho Date: Thu, 22 Oct 2026 10:12:29 -0400 Subject: [PATCH 2/2] Change comment --- .../java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/solr/core/src/java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java b/solr/core/src/java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java index fe7ebefdd495..6a2c4d253042 100644 --- a/solr/core/src/java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java +++ b/solr/core/src/java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java @@ -86,8 +86,7 @@ public ContextPropagators getPropagators() { // solr.metrics.jvm.* system property instead of hardcoding true/true here. Experimental.setEmitExperimentalMetrics(builder, true); Experimental.setEmitExperimentalJfrMetrics(builder, true); - // A JDK bug, fixed in later releases, makes JMX return no system CPU utilization. - // So we get CPU utilization from JFR instead + // Get CPU utilization from JFR instead of JMX to work around JDK bugs Experimental.setJfrMetrics( builder, IncludeExclude.builder().setIncluded(List.of("jvm.system.cpu.utilization")).build());