diff options
author | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-06-09 12:29:19 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-06-09 12:29:19 +0200 |
commit | b5ca7c8c1a89507d609bb4cf003be8602fd9a0fb (patch) | |
tree | d1f27c378cfa4ebbd85ae634a1ae15e362285bd5 /jdisc_core/src/main | |
parent | f5d7c6546b8676f32fa94e0767ad2951335eeb62 (diff) |
Regularly trigger GC to improve accuracy of metrics
Diffstat (limited to 'jdisc_core/src/main')
-rw-r--r-- | jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainerDeactivationWatchdog.java | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainerDeactivationWatchdog.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainerDeactivationWatchdog.java index 7902a89b88e..96bbb6a4111 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainerDeactivationWatchdog.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainerDeactivationWatchdog.java @@ -28,6 +28,7 @@ import static java.util.stream.Collectors.toList; class ActiveContainerDeactivationWatchdog implements ActiveContainerMetrics, AutoCloseable { static final Duration WATCHDOG_FREQUENCY = Duration.ofMinutes(20); static final Duration ACTIVE_CONTAINER_GRACE_PERIOD = Duration.ofHours(1); + static final Duration GC_TRIGGER_FREQUENCY = ACTIVE_CONTAINER_GRACE_PERIOD.minusMinutes(5); private static final Logger log = Logger.getLogger(ActiveContainerDeactivationWatchdog.class.getName()); @@ -58,6 +59,11 @@ class ActiveContainerDeactivationWatchdog implements ActiveContainerMetrics, Aut WATCHDOG_FREQUENCY.getSeconds(), WATCHDOG_FREQUENCY.getSeconds(), TimeUnit.SECONDS); + this.scheduler.scheduleWithFixedDelay( + ActiveContainerDeactivationWatchdog::triggerGc, + GC_TRIGGER_FREQUENCY.getSeconds(), + GC_TRIGGER_FREQUENCY.getSeconds(), + TimeUnit.SECONDS); } void onContainerActivation(ActiveContainer nextContainer) { @@ -101,6 +107,13 @@ class ActiveContainerDeactivationWatchdog implements ActiveContainerMetrics, Aut } } + private static void triggerGc() { + // ActiveContainer has a finalizer, so gc -> finalizer -> gc is required. + System.gc(); + System.runFinalization(); + System.gc(); + } + private List<DeactivatedContainer> getDeactivatedContainersSnapshot() { Instant now = clock.instant(); synchronized (monitor) { |