Skip to content

Commit 2d66463

Browse files
sryzaJoshRosen
authored andcommitted
SPARK-3428. TaskMetrics for running tasks is missing GC time metrics
Author: Sandy Ryza <[email protected]> Closes #3684 from sryza/sandy-spark-3428 and squashes the following commits: cb827fe [Sandy Ryza] SPARK-3428. TaskMetrics for running tasks is missing GC time metrics (cherry picked from commit 283263f) Signed-off-by: Josh Rosen <[email protected]>
1 parent f4e6ffc commit 2d66463

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

core/src/main/scala/org/apache/spark/executor/Executor.scala

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,16 @@ private[spark] class Executor(
125125
threadPool.shutdown()
126126
}
127127

128+
private def gcTime = ManagementFactory.getGarbageCollectorMXBeans.map(_.getCollectionTime).sum
129+
128130
class TaskRunner(
129131
execBackend: ExecutorBackend, val taskId: Long, taskName: String, serializedTask: ByteBuffer)
130132
extends Runnable {
131133

132134
@volatile private var killed = false
133135
@volatile var task: Task[Any] = _
134136
@volatile var attemptedTask: Option[Task[Any]] = None
137+
@volatile var startGCTime: Long = _
135138

136139
def kill(interruptThread: Boolean) {
137140
logInfo(s"Executor is trying to kill $taskName (TID $taskId)")
@@ -149,8 +152,7 @@ private[spark] class Executor(
149152
logInfo(s"Running $taskName (TID $taskId)")
150153
execBackend.statusUpdate(taskId, TaskState.RUNNING, EMPTY_BYTE_BUFFER)
151154
var taskStart: Long = 0
152-
def gcTime = ManagementFactory.getGarbageCollectorMXBeans.map(_.getCollectionTime).sum
153-
val startGCTime = gcTime
155+
startGCTime = gcTime
154156

155157
try {
156158
SparkEnv.set(env)
@@ -351,10 +353,13 @@ private[spark] class Executor(
351353

352354
while (!isStopped) {
353355
val tasksMetrics = new ArrayBuffer[(Long, TaskMetrics)]()
356+
val curGCTime = gcTime
357+
354358
for (taskRunner <- runningTasks.values()) {
355359
if (!taskRunner.attemptedTask.isEmpty) {
356360
Option(taskRunner.task).flatMap(_.metrics).foreach { metrics =>
357361
metrics.updateShuffleReadMetrics
362+
metrics.jvmGCTime = curGCTime - taskRunner.startGCTime
358363
if (isLocal) {
359364
// JobProgressListener will hold an reference of it during
360365
// onExecutorMetricsUpdate(), then JobProgressListener can not see

0 commit comments

Comments
 (0)