summaryrefslogtreecommitdiffstats
path: root/jdisc_core
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-06-09 12:29:19 +0200
committerBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-06-09 12:29:19 +0200
commitb5ca7c8c1a89507d609bb4cf003be8602fd9a0fb (patch)
treed1f27c378cfa4ebbd85ae634a1ae15e362285bd5 /jdisc_core
parentf5d7c6546b8676f32fa94e0767ad2951335eeb62 (diff)
Regularly trigger GC to improve accuracy of metrics
Diffstat (limited to 'jdisc_core')
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainerDeactivationWatchdog.java13
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) {