From 8b97c3b3426ef14592112652994cf80f1b97e0ab Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Wed, 9 Dec 2015 10:16:06 +0000 Subject: [PATCH] Add nonheap metrics to /metrics endpoint Fixes gh-4712 --- .../actuate/endpoint/SystemPublicMetrics.java | 22 +++++++++++++++++++ .../endpoint/SystemPublicMetricsTests.java | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SystemPublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SystemPublicMetrics.java index ab751f25ee3..69ff5007ab1 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SystemPublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SystemPublicMetrics.java @@ -78,6 +78,7 @@ public class SystemPublicMetrics implements PublicMetrics, Ordered { * Add metrics from ManagementFactory if possible. Note that ManagementFactory is not * available on Google App Engine. * @param result the result + * @param mem */ private void addManagementMetrics(Collection> result) { try { @@ -107,6 +108,27 @@ public class SystemPublicMetrics implements PublicMetrics, Ordered { result.add(new Metric("heap.init", memoryUsage.getInit() / 1024)); result.add(new Metric("heap.used", memoryUsage.getUsed() / 1024)); result.add(new Metric("heap", memoryUsage.getMax() / 1024)); + memoryUsage = ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage(); + result.add( + new Metric("nonheap.committed", memoryUsage.getCommitted() / 1024)); + result.add(new Metric("nonheap.init", memoryUsage.getInit() / 1024)); + result.add(new Metric("nonheap.used", memoryUsage.getUsed() / 1024)); + result.add(new Metric("nonheap", memoryUsage.getMax() / 1024)); + Metric mem = findMemory(result); + if (mem != null) { + mem.increment(new Long(memoryUsage.getUsed() / 1024).intValue()); + } + } + + private Metric findMemory(Collection> result) { + for (Metric metric : result) { + if ("mem".equals(metric.getName())) { + @SuppressWarnings("unchecked") + Metric value = (Metric) metric; + return value; + } + } + return null; } /** diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SystemPublicMetricsTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SystemPublicMetricsTests.java index b1ae7c66fdd..dcf19187e32 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SystemPublicMetricsTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SystemPublicMetricsTests.java @@ -50,6 +50,11 @@ public class SystemPublicMetricsTests { assertTrue(results.containsKey("heap.used")); assertTrue(results.containsKey("heap")); + assertTrue(results.containsKey("nonheap.committed")); + assertTrue(results.containsKey("nonheap.init")); + assertTrue(results.containsKey("nonheap.used")); + assertTrue(results.containsKey("nonheap")); + assertTrue(results.containsKey("threads.peak")); assertTrue(results.containsKey("threads.daemon")); assertTrue(results.containsKey("threads.totalStarted"));