Repository: hadoop Updated Branches: refs/heads/trunk ce9c00643 -> d792a9020
YARN-5296. NMs going OutOfMemory because ContainerMetrics leak in ContainerMonitorImpl. Contributed by Junping Du Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/d792a902 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/d792a902 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/d792a902 Branch: refs/heads/trunk Commit: d792a90206e940c31d1048e53dc24ded605788bf Parents: ce9c006 Author: Jian He <[email protected]> Authored: Tue Jul 5 18:05:16 2016 -0700 Committer: Jian He <[email protected]> Committed: Tue Jul 5 18:05:16 2016 -0700 ---------------------------------------------------------------------- .../apache/hadoop/metrics2/lib/MutableQuantiles.java | 13 +++++++++++-- .../containermanager/monitor/ContainerMetrics.java | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/d792a902/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableQuantiles.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableQuantiles.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableQuantiles.java index a4711db..5b12370 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableQuantiles.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableQuantiles.java @@ -23,6 +23,7 @@ import static org.apache.hadoop.metrics2.lib.Interns.info; import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import org.apache.commons.lang.StringUtils; @@ -57,6 +58,7 @@ public class MutableQuantiles extends MutableMetric { private QuantileEstimator estimator; private long previousCount = 0; + private ScheduledFuture<?> scheduledTask = null; @VisibleForTesting protected Map<Quantile, Long> previousSnapshot = null; @@ -105,8 +107,8 @@ public class MutableQuantiles extends MutableMetric { estimator = new SampleQuantiles(quantiles); this.interval = interval; - scheduler.scheduleAtFixedRate(new RolloverSample(this), interval, interval, - TimeUnit.SECONDS); + scheduledTask = scheduler.scheduleAtFixedRate(new RolloverSample(this), + interval, interval, TimeUnit.SECONDS); } @Override @@ -135,6 +137,13 @@ public class MutableQuantiles extends MutableMetric { return interval; } + public void stop() { + if (scheduledTask != null) { + scheduledTask.cancel(false); + } + scheduledTask = null; + } + public synchronized void setEstimator(QuantileEstimator quantileEstimator) { this.estimator = quantileEstimator; } http://git-wip-us.apache.org/repos/asf/hadoop/blob/d792a902/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerMetrics.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerMetrics.java index 31a9aa7..07b3dea 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerMetrics.java @@ -250,6 +250,8 @@ public class ContainerMetrics implements MetricsSource { timer = null; } scheduleTimerTaskForUnregistration(); + this.pMemMBQuantiles.stop(); + this.cpuCoreUsagePercentQuantiles.stop(); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
