diff --git a/extensions/micrometer/runtime/src/main/java/io/quarkus/micrometer/runtime/MicrometerRecorder.java b/extensions/micrometer/runtime/src/main/java/io/quarkus/micrometer/runtime/MicrometerRecorder.java index ecf9b2afc6aa9..d500a274f7a59 100644 --- a/extensions/micrometer/runtime/src/main/java/io/quarkus/micrometer/runtime/MicrometerRecorder.java +++ b/extensions/micrometer/runtime/src/main/java/io/quarkus/micrometer/runtime/MicrometerRecorder.java @@ -107,15 +107,21 @@ public void configureRegistries(MicrometerConfig config, } } + List autoCloseables = new ArrayList<>(); + // Base JVM Metrics if (config.checkBinderEnabledWithDefault(() -> config.binder.jvm)) { new ClassLoaderMetrics().bindTo(Metrics.globalRegistry); - new JvmHeapPressureMetrics().bindTo(Metrics.globalRegistry); + JvmHeapPressureMetrics jvmHeapPressureMetrics = new JvmHeapPressureMetrics(); + jvmHeapPressureMetrics.bindTo(Metrics.globalRegistry); + autoCloseables.add(jvmHeapPressureMetrics); new JvmMemoryMetrics().bindTo(Metrics.globalRegistry); new JvmThreadMetrics().bindTo(Metrics.globalRegistry); new JVMInfoBinder().bindTo(Metrics.globalRegistry); if (ImageMode.current() == ImageMode.JVM) { - new JvmGcMetrics().bindTo(Metrics.globalRegistry); + JvmGcMetrics jvmGcMetrics = new JvmGcMetrics(); + jvmGcMetrics.bindTo(Metrics.globalRegistry); + autoCloseables.add(jvmGcMetrics); } } @@ -149,6 +155,14 @@ public void run() { meterRegistry.close(); Metrics.removeRegistry(meterRegistry); } + // iterate over the auto-closeables and close them + for (AutoCloseable autoCloseable : autoCloseables) { + try { + autoCloseable.close(); + } catch (Exception e) { + log.error("Error closing", e); + } + } } }); }