diff options
author | Olli Virtanen <olli.virtanen@oath.com> | 2018-06-01 12:09:03 +0200 |
---|---|---|
committer | Olli Virtanen <olli.virtanen@oath.com> | 2018-06-01 12:09:03 +0200 |
commit | e5d6ee5899daca0644df14ef143678d43cd5b231 (patch) | |
tree | 3dcd83ec0f44f704e405fea5dd773a677198d0b2 /container-disc/src/test | |
parent | 5c57852b26126d72b080fb6e0893dc3d633c28c1 (diff) |
JVM Garbage collection metrics
Diffstat (limited to 'container-disc/src/test')
2 files changed, 64 insertions, 1 deletions
diff --git a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/GarbageCollectionMetricsTest.java b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/GarbageCollectionMetricsTest.java new file mode 100644 index 00000000000..76ad430f4b9 --- /dev/null +++ b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/GarbageCollectionMetricsTest.java @@ -0,0 +1,60 @@ +package com.yahoo.container.jdisc.metric; + +import com.yahoo.jdisc.Metric; +import org.junit.Test; + +import java.lang.management.ManagementFactory; +import java.time.Clock; +import java.util.LinkedList; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * @author ollivir + */ +public class GarbageCollectionMetricsTest { + @Test + public void gc_metrics_reported_at_intervals() { + Clock clock = mock(Clock.class); + Metric metric = mock(Metric.class); + int base = ManagementFactory.getGarbageCollectorMXBeans().size(); + + long iv = GarbageCollectionMetrics.REPORTING_INTERVAL; + when(clock.millis()).thenReturn(10L); + GarbageCollectionMetrics garbageCollectionMetrics = new GarbageCollectionMetrics(clock); + assertThat(garbageCollectionMetrics.getGcStatistics().keySet().size(), is(base)); + + when(clock.millis()).thenReturn(iv); + garbageCollectionMetrics.emitMetrics(metric); + assertWindowLengths(garbageCollectionMetrics, 2); + + when(clock.millis()).thenReturn(10L + iv); + garbageCollectionMetrics.emitMetrics(metric); + assertWindowLengths(garbageCollectionMetrics, 3); + + when(clock.millis()).thenReturn(20L + iv); + garbageCollectionMetrics.emitMetrics(metric); + assertWindowLengths(garbageCollectionMetrics, 3); + + when(clock.millis()).thenReturn(20L + iv + iv); + garbageCollectionMetrics.emitMetrics(metric); + assertWindowLengths(garbageCollectionMetrics, 2); + + verify(metric, times(base * 4 * 2)).set(anyString(), any(), any()); + } + + private static void assertWindowLengths(GarbageCollectionMetrics gcm, int count) { + for(LinkedList<GarbageCollectionMetrics.GcStats> window: gcm.getGcStatistics().values()) { + assertThat(window.size(), is(count)); + } + } +} diff --git a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java index f10af7593a4..e9e04eab3b4 100644 --- a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java +++ b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java @@ -5,6 +5,7 @@ import com.yahoo.jdisc.Metric; import com.yahoo.jdisc.statistics.ContainerWatchdogMetrics; import org.junit.Test; +import java.lang.management.ManagementFactory; import java.time.Duration; import static org.mockito.Matchers.any; @@ -20,11 +21,13 @@ public class MetricUpdaterTest { @Test public void metrics_are_updated_in_scheduler_cycle() throws InterruptedException { + int gcCount = ManagementFactory.getGarbageCollectorMXBeans().size(); + Metric metric = mock(Metric.class); ContainerWatchdogMetrics containerWatchdogMetrics = mock(ContainerWatchdogMetrics.class); new MetricUpdater(new MockScheduler(), metric, containerWatchdogMetrics); verify(containerWatchdogMetrics, times(1)).emitMetrics(any()); - verify(metric, times(8)).set(anyString(), any(), any()); + verify(metric, times(8 + 2 * gcCount)).set(anyString(), any(), any()); } private static class MockScheduler implements MetricUpdater.Scheduler { |