aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Greule <SirYwell@users.noreply.github.com>2024-07-14 16:35:16 +0200
committerGitHub <noreply@github.com>2024-07-14 15:35:16 +0100
commitd909d19fc01a3011956b51556837764aecbf58f3 (patch)
tree889cea9544f57b43f9e7b907fa1bbb26a5ea10f5
parent45ce159cda4a444fda437deae99452e8ed71493e (diff)
downloadspark-d909d19fc01a3011956b51556837764aecbf58f3.tar.gz
spark-d909d19fc01a3011956b51556837764aecbf58f3.tar.bz2
spark-d909d19fc01a3011956b51556837764aecbf58f3.zip
Ignore trailing sleeping samples for duration estimation (#413)
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java2
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java12
2 files changed, 12 insertions, 2 deletions
diff --git a/spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java b/spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java
index c51ec05..b7b841e 100644
--- a/spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java
+++ b/spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java
@@ -99,7 +99,7 @@ public abstract class JavaDataAggregator extends AbstractDataAggregator {
return super.exportData();
}
- private static boolean isSleeping(ThreadInfo thread) {
+ static boolean isSleeping(ThreadInfo thread) {
if (thread.getThreadState() == Thread.State.WAITING || thread.getThreadState() == Thread.State.TIMED_WAITING) {
return true;
}
diff --git a/spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java b/spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java
index 08cb719..f24af3f 100644
--- a/spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java
+++ b/spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java
@@ -110,7 +110,7 @@ public class TickedDataAggregator extends JavaDataAggregator {
}
// approximate how long the tick lasted
- int tickLengthMicros = currentData.getList().size() * this.interval;
+ int tickLengthMicros = currentData.sizeWithoutTrailingSleeping() * this.interval;
// don't push data below the threshold
if (tickLengthMicros < this.tickLengthThreshold) {
@@ -151,6 +151,16 @@ public class TickedDataAggregator extends JavaDataAggregator {
return this.list;
}
+ public int sizeWithoutTrailingSleeping() {
+ // find the last index at which the thread wasn't sleeping
+ for (int i = this.list.size() - 1; i >= 0; i--) {
+ if (!isSleeping(this.list.get(i))) {
+ return i + 1; // add one to go from index to size
+ }
+ }
+ return 0;
+ }
+
public void addData(ThreadInfo data) {
this.list.add(data);
}