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]

Reply via email to