Commit 51dddc2d authored by Christian Dupuis's avatar Christian Dupuis

Add gc information to /metrics endpoint

parent c38f9bcd
...@@ -17,20 +17,23 @@ ...@@ -17,20 +17,23 @@
package org.springframework.boot.actuate.endpoint; package org.springframework.boot.actuate.endpoint;
import java.lang.management.ClassLoadingMXBean; import java.lang.management.ClassLoadingMXBean;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.lang.management.MemoryUsage; import java.lang.management.MemoryUsage;
import java.lang.management.ThreadMXBean; import java.lang.management.ThreadMXBean;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List;
import org.springframework.boot.actuate.metrics.Metric; import org.springframework.boot.actuate.metrics.Metric;
import org.springframework.boot.actuate.metrics.reader.MetricReader; import org.springframework.boot.actuate.metrics.reader.MetricReader;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/** /**
* Default implementation of {@link PublicMetrics} that exposes all metrics from a * Default implementation of {@link PublicMetrics} that exposes all metrics from a
* {@link MetricReader} along with memory information. * {@link MetricReader} along with memory information.
* *
* @author Dave Syer * @author Dave Syer
* @author Christian Dupuis * @author Christian Dupuis
*/ */
...@@ -54,6 +57,7 @@ public class VanillaPublicMetrics implements PublicMetrics { ...@@ -54,6 +57,7 @@ public class VanillaPublicMetrics implements PublicMetrics {
addHeapMetrics(result); addHeapMetrics(result);
addThreadMetrics(result); addThreadMetrics(result);
addClassLoadingMetrics(result); addClassLoadingMetrics(result);
addGarbageCollecitonMetrics(result);
return result; return result;
} }
...@@ -110,4 +114,28 @@ public class VanillaPublicMetrics implements PublicMetrics { ...@@ -110,4 +114,28 @@ public class VanillaPublicMetrics implements PublicMetrics {
.getUnloadedClassCount()))); .getUnloadedClassCount())));
} }
/**
* Add garbage collection metrics.
*/
protected void addGarbageCollecitonMetrics(Collection<Metric<?>> result) {
List<GarbageCollectorMXBean> garbageCollectorMxBeans = ManagementFactory
.getGarbageCollectorMXBeans();
for (int i = 0; i < garbageCollectorMxBeans.size(); i++) {
GarbageCollectorMXBean garbageCollectorMXBean = garbageCollectorMxBeans
.get(i);
String name = beautifyGcName(garbageCollectorMXBean.getName());
result.add(new Metric<Long>("gc." + name + ".count", new Long(
garbageCollectorMXBean.getCollectionCount())));
result.add(new Metric<Long>("gc." + name + ".time", new Long(
garbageCollectorMXBean.getCollectionTime())));
}
}
/**
* Turn GC names like 'PS Scavenge' or 'PS MarkSweep' into something that is more
* metrics friendly.
*/
private String beautifyGcName(String name) {
return StringUtils.replace(name, " ", "_").toLowerCase();
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment