Skip to content

Commit 5a0bddd

Browse files
authored
Unregister jmx gc metrics (#8650)
1 parent e22f4c5 commit 5a0bddd

File tree

3 files changed

+14
-8
lines changed
  • instrumentation/runtime-metrics

3 files changed

+14
-8
lines changed

instrumentation/runtime-metrics/runtime-metrics-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetrics.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public final class RuntimeMetrics implements Closeable {
5353
observables.addAll(Cpu.registerObservers(openTelemetry));
5454
observables.addAll(MemoryPools.registerObservers(openTelemetry));
5555
observables.addAll(Threads.registerObservers(openTelemetry));
56-
GarbageCollector.registerObservers(openTelemetry);
56+
observables.addAll(GarbageCollector.registerObservers(openTelemetry));
5757
}
5858
} catch (Exception e) {
5959
close();

instrumentation/runtime-metrics/runtime-metrics-java8/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) {
4141
observables.addAll(Cpu.registerObservers(openTelemetry));
4242
observables.addAll(MemoryPools.registerObservers(openTelemetry));
4343
observables.addAll(Threads.registerObservers(openTelemetry));
44-
GarbageCollector.registerObservers(openTelemetry);
44+
observables.addAll(GarbageCollector.registerObservers(openTelemetry));
4545
Thread cleanupTelemetry =
4646
new Thread(
4747
() -> {

instrumentation/runtime-metrics/runtime-metrics-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/GarbageCollector.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.JmxRuntimeMetricsUtil;
1919
import java.lang.management.GarbageCollectorMXBean;
2020
import java.lang.management.ManagementFactory;
21+
import java.util.ArrayList;
22+
import java.util.Collections;
2123
import java.util.List;
2224
import java.util.concurrent.TimeUnit;
2325
import java.util.function.Function;
@@ -53,22 +55,22 @@ public final class GarbageCollector {
5355
.equals(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION);
5456

5557
/** Register observers for java runtime memory metrics. */
56-
public static void registerObservers(OpenTelemetry openTelemetry) {
58+
public static List<AutoCloseable> registerObservers(OpenTelemetry openTelemetry) {
5759
if (!isNotificationClassPresent()) {
5860
logger.fine(
5961
"The com.sun.management.GarbageCollectionNotificationInfo class is not available;"
6062
+ " GC metrics will not be reported.");
61-
return;
63+
return Collections.emptyList();
6264
}
6365

64-
registerObservers(
66+
return registerObservers(
6567
openTelemetry,
6668
ManagementFactory.getGarbageCollectorMXBeans(),
6769
GarbageCollector::extractNotificationInfo);
6870
}
6971

7072
// Visible for testing
71-
static void registerObservers(
73+
static List<AutoCloseable> registerObservers(
7274
OpenTelemetry openTelemetry,
7375
List<GarbageCollectorMXBean> gcBeans,
7476
Function<Notification, GarbageCollectionNotificationInfo> notificationInfoExtractor) {
@@ -82,14 +84,18 @@ static void registerObservers(
8284
setGcDurationBuckets(gcDurationBuilder);
8385
DoubleHistogram gcDuration = gcDurationBuilder.build();
8486

87+
List<AutoCloseable> result = new ArrayList<>();
8588
for (GarbageCollectorMXBean gcBean : gcBeans) {
8689
if (!(gcBean instanceof NotificationEmitter)) {
8790
continue;
8891
}
8992
NotificationEmitter notificationEmitter = (NotificationEmitter) gcBean;
90-
notificationEmitter.addNotificationListener(
91-
new GcNotificationListener(gcDuration, notificationInfoExtractor), GC_FILTER, null);
93+
GcNotificationListener listener =
94+
new GcNotificationListener(gcDuration, notificationInfoExtractor);
95+
notificationEmitter.addNotificationListener(listener, GC_FILTER, null);
96+
result.add(() -> notificationEmitter.removeNotificationListener(listener));
9297
}
98+
return result;
9399
}
94100

95101
private static void setGcDurationBuckets(DoubleHistogramBuilder builder) {

0 commit comments

Comments
 (0)