Repository: hadoop Updated Branches: refs/heads/branch-2 56a08983e -> 46f820499
YARN-5296. NMs going OutOfMemory because ContainerMetrics leak in ContainerMonitorImpl. Contributed by Junping Du (cherry picked from commit d792a90206e940c31d1048e53dc24ded605788bf) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/46f82049 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/46f82049 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/46f82049 Branch: refs/heads/branch-2 Commit: 46f82049923a817ab9670506193ffd2b6b58d262 Parents: 56a0898 Author: Jian He <[email protected]> Authored: Tue Jul 5 18:05:16 2016 -0700 Committer: Jian He <[email protected]> Committed: Tue Jul 5 18:06:03 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/46f82049/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/46f82049/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]
