summaryrefslogtreecommitdiffstats
path: root/jdisc_core
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-09-24 08:20:08 +0200
committerGitHub <noreply@github.com>2021-09-24 08:20:08 +0200
commit8b5c2f0197ec501e97a2b31dfea2e0fe3ac1ef85 (patch)
tree37ac7ba9d6846a983230b69a3de56b8b07802ebc /jdisc_core
parent06f306fcb22c293cc740363a2dac99de0859a09a (diff)
parentecfe4675fb229c03cf446ae6448ede715e335442 (diff)
Merge pull request #19272 from vespa-engine/balder/gc-deactivated-container-sooner
- Shorten grace period from 30m to 5m.
Diffstat (limited to 'jdisc_core')
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java40
1 files changed, 27 insertions, 13 deletions
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java
index 30aa0028465..7e82955eede 100644
--- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java
+++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java
@@ -22,8 +22,9 @@ import java.util.logging.Logger;
*/
class ContainerWatchdog implements ContainerWatchdogMetrics, AutoCloseable {
- static final Duration GRACE_PERIOD = Duration.ofMinutes(30);
+ static final Duration GRACE_PERIOD = Duration.ofMinutes(5);
static final Duration UPDATE_PERIOD = Duration.ofMinutes(5);
+ static final Duration CHECK_PERIOD = Duration.ofSeconds(1);
private static final Logger log = Logger.getLogger(ContainerWatchdog.class.getName());
@@ -35,6 +36,7 @@ class ContainerWatchdog implements ContainerWatchdogMetrics, AutoCloseable {
private ActiveContainer currentContainer;
private Instant currentContainerActivationTime;
private int numStaleContainers;
+ private Instant lastLogTime;
ContainerWatchdog() {
this(new ScheduledThreadPoolExecutor(
@@ -50,8 +52,8 @@ class ContainerWatchdog implements ContainerWatchdogMetrics, AutoCloseable {
ContainerWatchdog(ScheduledExecutorService scheduler, Clock clock) {
this.scheduler = scheduler;
this.clock = clock;
- scheduler.scheduleAtFixedRate(
- this::monitorDeactivatedContainers, UPDATE_PERIOD.getSeconds(), UPDATE_PERIOD.getSeconds(), TimeUnit.SECONDS);
+ this.lastLogTime = clock.instant();
+ scheduler.scheduleAtFixedRate(this::monitorDeactivatedContainers, CHECK_PERIOD.getSeconds(), CHECK_PERIOD.getSeconds(), TimeUnit.SECONDS);
}
@Override
@@ -77,31 +79,43 @@ class ContainerWatchdog implements ContainerWatchdogMetrics, AutoCloseable {
void onContainerActivation(ActiveContainer nextContainer) {
synchronized (monitor) {
if (currentContainer != null) {
- deactivatedContainers.add(
- new DeactivatedContainer(currentContainer, currentContainerActivationTime, clock.instant()));
+ deactivatedContainers.add(new DeactivatedContainer(currentContainer, currentContainerActivationTime, clock.instant()));
}
currentContainer = nextContainer;
currentContainerActivationTime = clock.instant();
}
}
+ private String removalMsg(DeactivatedContainer container) {
+ return String.format("Removing deactivated container: instance=%s, activated=%s, deactivated=%s",
+ container.instance, container.timeActivated, container.timeDeactivated);
+ }
+
+ private String regularMsg(DeactivatedContainer container, int refCount) {
+ return String.format(
+ "Deactivated container still alive: instance=%s, activated=%s, deactivated=%s, ref-count=%d",
+ container.instance, container.timeActivated, container.timeDeactivated, refCount);
+ }
+
void monitorDeactivatedContainers() {
synchronized (monitor) {
int numStaleContainer = 0;
Iterator<DeactivatedContainer> iterator = deactivatedContainers.iterator();
+ boolean timeToLogAgain = clock.instant().isAfter(lastLogTime.plus(UPDATE_PERIOD));
while (iterator.hasNext()) {
DeactivatedContainer container = iterator.next();
int refCount = container.instance.retainCount();
if (refCount == 0) {
+ log.fine(removalMsg(container));
iterator.remove();
- break;
- }
- if (isPastGracePeriod(container)) {
- ++numStaleContainer;
- log.warning(
- String.format(
- "Deactivated container still alive: instance=%s, activated=%s, deactivated=%s, ref-count=%d",
- container.instance.toString(), container.timeActivated, container.timeDeactivated, refCount));
+ } else {
+ if (isPastGracePeriod(container)) {
+ ++numStaleContainer;
+ if (timeToLogAgain) {
+ log.warning(regularMsg(container, refCount));
+ lastLogTime = clock.instant();
+ }
+ }
}
}
this.numStaleContainers = numStaleContainer;