diff --git a/metrics-jvm/src/main/java/com/codahale/metrics/jvm/MemoryUsageGaugeSet.java b/metrics-jvm/src/main/java/com/codahale/metrics/jvm/MemoryUsageGaugeSet.java index 7e0d319b52..1797c84442 100644 --- a/metrics-jvm/src/main/java/com/codahale/metrics/jvm/MemoryUsageGaugeSet.java +++ b/metrics-jvm/src/main/java/com/codahale/metrics/jvm/MemoryUsageGaugeSet.java @@ -178,6 +178,13 @@ public Long getValue() { } }); + gauges.put(name(poolName, "used-after-gc"),new Gauge() { + @Override + public Long getValue() { + return pool.getCollectionUsage().getUsed(); + } + }); + gauges.put(name(poolName, "init"),new Gauge() { @Override public Long getValue() { diff --git a/metrics-jvm/src/test/java/com/codahale/metrics/jvm/MemoryUsageGaugeSetTest.java b/metrics-jvm/src/test/java/com/codahale/metrics/jvm/MemoryUsageGaugeSetTest.java index dbfe2c601b..96df0b024d 100644 --- a/metrics-jvm/src/test/java/com/codahale/metrics/jvm/MemoryUsageGaugeSetTest.java +++ b/metrics-jvm/src/test/java/com/codahale/metrics/jvm/MemoryUsageGaugeSetTest.java @@ -18,6 +18,7 @@ public class MemoryUsageGaugeSetTest { private final MemoryUsage nonHeap = mock(MemoryUsage.class); private final MemoryUsage pool = mock(MemoryUsage.class); private final MemoryUsage weirdPool = mock(MemoryUsage.class); + private final MemoryUsage weirdCollection = mock(MemoryUsage.class); private final MemoryMXBean mxBean = mock(MemoryMXBean.class); private final MemoryPoolMXBean memoryPool = mock(MemoryPoolMXBean.class); private final MemoryPoolMXBean weirdMemoryPool = mock(MemoryPoolMXBean.class); @@ -48,6 +49,8 @@ public void setUp() throws Exception { when(weirdPool.getUsed()).thenReturn(300L); when(weirdPool.getMax()).thenReturn(-1L); + when(weirdCollection.getUsed()).thenReturn(290L); + when(mxBean.getHeapMemoryUsage()).thenReturn(heap); when(mxBean.getNonHeapMemoryUsage()).thenReturn(nonHeap); @@ -55,6 +58,7 @@ public void setUp() throws Exception { when(memoryPool.getName()).thenReturn("Big Pool"); when(weirdMemoryPool.getUsage()).thenReturn(weirdPool); + when(weirdMemoryPool.getCollectionUsage()).thenReturn(weirdCollection); when(weirdMemoryPool.getName()).thenReturn("Weird Pool"); } @@ -81,9 +85,11 @@ public void hasASetOfGauges() throws Exception { "pools.Big-Pool.used", "pools.Big-Pool.usage", "pools.Big-Pool.max", + "pools.Big-Pool.used-after-gc", "pools.Weird-Pool.init", "pools.Weird-Pool.committed", "pools.Weird-Pool.used", + "pools.Weird-Pool.used-after-gc", "pools.Weird-Pool.usage", "pools.Weird-Pool.max"); } @@ -248,6 +254,14 @@ public void hasAGaugeForWeirdMemoryPoolMax() throws Exception { .isEqualTo(-1L); } + @Test + public void hasAGaugeForWeirdCollectionPoolUsed() throws Exception { + final Gauge gauge = (Gauge) gauges.getMetrics().get("pools.Weird-Pool.used-after-gc"); + + assertThat(gauge.getValue()) + .isEqualTo(290L); + } + @Test public void autoDetectsMemoryUsageBeanAndMemoryPools() throws Exception { assertThat(new MemoryUsageGaugeSet().getMetrics().keySet())