This is an automated email from the ASF dual-hosted git repository.
mlbiscoc pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new 5f5d1db8f71 SOLR-18544: Source CPU utilization metric from JFR instead
JMX (#5185)
5f5d1db8f71 is described below
commit 5f5d1db8f7126a3f62b6602260e2a8f6f7200b45
Author: Matthew Biscocho <[email protected]>
AuthorDate: Tue Oct 27 15:42:00 2026 -0400
SOLR-18544: Source CPU utilization metric from JFR instead JMX (#5185)
Partially a regression from SOLR-18407 but also partially a JDK bug that
got exposed from the OTEL upgrade.
This was because previously the metric was sourced from JFR. Then after the
upgrade it started to source it from JMX which failed to some JDK bug. So this
change just sources it from JFR again.
---
.../src/java/org/apache/solr/metrics/OtelRuntimeJvmMetrics.java | 6 ++++++
1 file changed, 6 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 a5941b003fe..6a2c4d25304 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.MeterProvider;
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,10 @@ public class OtelRuntimeJvmMetrics {
// solr.metrics.jvm.* system property instead of hardcoding true/true here.
Experimental.setEmitExperimentalMetrics(builder, true);
Experimental.setEmitExperimentalJfrMetrics(builder, true);
+ // 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());
this.runtimeMetrics = builder.build();
java.lang.management.OperatingSystemMXBean osMxBean =
ManagementFactory.getOperatingSystemMXBean();