TEZ-2210. Record DAG AM CPU usage stats (bikas)

Project: http://git-wip-us.apache.org/repos/asf/tez/repo
Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/a44f5c58
Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/a44f5c58
Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/a44f5c58

Branch: refs/heads/TEZ-2003
Commit: a44f5c582ff916915ab2f26443da81ac70f6231f
Parents: b7b1b69
Author: Bikas Saha <[email protected]>
Authored: Sat Mar 21 00:55:46 2015 -0700
Committer: Bikas Saha <[email protected]>
Committed: Sat Mar 21 00:55:46 2015 -0700

----------------------------------------------------------------------
 .../org/apache/tez/common/GcTimeUpdater.java    | 78 ++++++++++++++++++++
 1 file changed, 78 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tez/blob/a44f5c58/tez-common/src/main/java/org/apache/tez/common/GcTimeUpdater.java
----------------------------------------------------------------------
diff --git a/tez-common/src/main/java/org/apache/tez/common/GcTimeUpdater.java 
b/tez-common/src/main/java/org/apache/tez/common/GcTimeUpdater.java
new file mode 100644
index 0000000..344c08a
--- /dev/null
+++ b/tez-common/src/main/java/org/apache/tez/common/GcTimeUpdater.java
@@ -0,0 +1,78 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations 
under
+ * the License.
+ */
+
+package org.apache.tez.common;
+
+import java.lang.management.GarbageCollectorMXBean;
+import java.lang.management.ManagementFactory;
+import java.util.List;
+
+import org.apache.hadoop.classification.InterfaceAudience.Private;
+import org.apache.tez.common.counters.TezCounter;
+import org.apache.tez.common.counters.TezCounters;
+import org.apache.tez.common.counters.TaskCounter;
+
+/**
+ * An updater that tracks the amount of time this task has spent in GC.
+ */
+@Private
+public class GcTimeUpdater {
+  private long lastGcMillis = 0;
+  private List<GarbageCollectorMXBean> gcBeans = null;
+  TezCounters counters;
+
+  public GcTimeUpdater(TezCounters counters) {
+    this.gcBeans = ManagementFactory.getGarbageCollectorMXBeans();
+    getElapsedGc(); // Initialize 'lastGcMillis' with the current time spent.
+    this.counters = counters;
+  }
+  
+  public long getCumulativaGcTime() {
+    long thisGcMillis = 0;
+    for (GarbageCollectorMXBean gcBean : gcBeans) {
+      thisGcMillis += gcBean.getCollectionTime();
+    }
+    return thisGcMillis;
+  }
+
+  /**
+   * Get the elapsed time since the last call. This is not thread safe.
+   * @return the number of milliseconds that the gc has used for CPU since the
+   *         last time this method was called.
+   */
+  protected long getElapsedGc() {
+    long thisGcMillis = getCumulativaGcTime();
+
+    long delta = thisGcMillis - lastGcMillis;
+    this.lastGcMillis = thisGcMillis;
+    return delta;
+  }
+
+  /**
+   * Increment the gc-elapsed-time counter.
+   */
+  public void incrementGcCounter() {
+    if (null == counters) {
+      return; // nothing to do.
+    }
+
+    TezCounter gcCounter = counters.findCounter(TaskCounter.GC_TIME_MILLIS);
+    if (null != gcCounter) {
+      gcCounter.increment(getElapsedGc());
+    }
+  }
+}

Reply via email to