YARN-5296. NMs going OutOfMemory because ContainerMetrics leak in ContainerMonitorImpl. Contributed by Junping Du

This commit is contained in:
Jian He 2016-07-05 18:05:16 -07:00
parent ce9c006430
commit d792a90206
2 changed files with 13 additions and 2 deletions

View File

@ -23,6 +23,7 @@
import java.util.Map; import java.util.Map;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -57,6 +58,7 @@ public class MutableQuantiles extends MutableMetric {
private QuantileEstimator estimator; private QuantileEstimator estimator;
private long previousCount = 0; private long previousCount = 0;
private ScheduledFuture<?> scheduledTask = null;
@VisibleForTesting @VisibleForTesting
protected Map<Quantile, Long> previousSnapshot = null; protected Map<Quantile, Long> previousSnapshot = null;
@ -105,8 +107,8 @@ public MutableQuantiles(String name, String description, String sampleName,
estimator = new SampleQuantiles(quantiles); estimator = new SampleQuantiles(quantiles);
this.interval = interval; this.interval = interval;
scheduler.scheduleAtFixedRate(new RolloverSample(this), interval, interval, scheduledTask = scheduler.scheduleAtFixedRate(new RolloverSample(this),
TimeUnit.SECONDS); interval, interval, TimeUnit.SECONDS);
} }
@Override @Override
@ -135,6 +137,13 @@ public int getInterval() {
return interval; return interval;
} }
public void stop() {
if (scheduledTask != null) {
scheduledTask.cancel(false);
}
scheduledTask = null;
}
public synchronized void setEstimator(QuantileEstimator quantileEstimator) { public synchronized void setEstimator(QuantileEstimator quantileEstimator) {
this.estimator = quantileEstimator; this.estimator = quantileEstimator;
} }

View File

@ -250,6 +250,8 @@ public synchronized void finished() {
timer = null; timer = null;
} }
scheduleTimerTaskForUnregistration(); scheduleTimerTaskForUnregistration();
this.pMemMBQuantiles.stop();
this.cpuCoreUsagePercentQuantiles.stop();
} }
} }