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()); + } + } +}
