add average and max cpu to results. (#3940)

This commit is contained in:
jason plumb 2021-08-24 18:19:29 -07:00 committed by GitHub
parent ec585c7717
commit 68d26a2bba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 1 deletions

View File

@ -23,6 +23,9 @@ public class AppPerfResults {
final long peakThreadCount; final long peakThreadCount;
final long averageNetworkRead; final long averageNetworkRead;
final long averageNetworkWrite; final long averageNetworkWrite;
final float averageJvmUserCpu;
final float maxJvmUserCpu;
private AppPerfResults(Builder builder) { private AppPerfResults(Builder builder) {
this.agent = builder.agent; this.agent = builder.agent;
@ -39,6 +42,8 @@ public class AppPerfResults {
this.peakThreadCount = builder.peakThreadCount; this.peakThreadCount = builder.peakThreadCount;
this.averageNetworkRead = builder.averageNetworkRead; this.averageNetworkRead = builder.averageNetworkRead;
this.averageNetworkWrite = builder.averageNetworkWrite; this.averageNetworkWrite = builder.averageNetworkWrite;
this.averageJvmUserCpu = builder.averageJvmUserCpu;
this.maxJvmUserCpu = builder.maxJvmUserCpu;
} }
double getTotalAllocatedMB() { double getTotalAllocatedMB() {
@ -67,6 +72,8 @@ public class AppPerfResults {
private long peakThreadCount; private long peakThreadCount;
public long averageNetworkRead; public long averageNetworkRead;
public long averageNetworkWrite; public long averageNetworkWrite;
public float averageJvmUserCpu;
public float maxJvmUserCpu;
AppPerfResults build() { AppPerfResults build() {
return new AppPerfResults(this); return new AppPerfResults(this);
@ -141,8 +148,20 @@ public class AppPerfResults {
this.averageNetworkWrite = averageNetworkWrite; this.averageNetworkWrite = averageNetworkWrite;
return this; return this;
} }
Builder averageJvmUserCpu(float averageJvmUserCpu){
this.averageJvmUserCpu = averageJvmUserCpu;
return this;
}
Builder maxJvmUserCpu(float maxJvmUserCpu){
this.maxJvmUserCpu = maxJvmUserCpu;
return this;
}
} }
public static class MinMax { public static class MinMax {
public final long min; public final long min;
public final long max; public final long max;

View File

@ -42,6 +42,8 @@ class CsvPersister implements ResultsPersister {
sb.append(",").append(result.averageNetworkRead); sb.append(",").append(result.averageNetworkRead);
sb.append(",").append(result.averageNetworkWrite); sb.append(",").append(result.averageNetworkWrite);
sb.append(",").append(result.peakThreadCount); sb.append(",").append(result.peakThreadCount);
sb.append(",").append(result.averageJvmUserCpu);
sb.append(",").append(result.maxJvmUserCpu);
}); });
sb.append("\n"); sb.append("\n");
try { try {
@ -84,6 +86,8 @@ class CsvPersister implements ResultsPersister {
sb.append(",").append(agent).append(":netReadAvg"); sb.append(",").append(agent).append(":netReadAvg");
sb.append(",").append(agent).append(":netWriteAvg"); sb.append(",").append(agent).append(":netWriteAvg");
sb.append(",").append(agent).append(":peakThreadCount"); sb.append(",").append(agent).append(":peakThreadCount");
sb.append(",").append(agent).append(":averageCpuUser");
sb.append(",").append(agent).append(":maxCpuUser");
}); });
sb.append("\n"); sb.append("\n");
return sb.toString(); return sb.toString();

View File

@ -30,6 +30,8 @@ class PrintStreamPersister implements ResultsPersister {
out.println("----------------------------------------------------------"); out.println("----------------------------------------------------------");
display(sorted, "Agent", appPerfResults -> appPerfResults.agent.getName()); display(sorted, "Agent", appPerfResults -> appPerfResults.agent.getName());
display(sorted, "Avg. CPU (user)", res -> String.valueOf(res.averageJvmUserCpu));
display(sorted, "Max. CPU (user)", res -> String.valueOf(res.maxJvmUserCpu));
display(sorted, "Startup time (ms)", res -> String.valueOf(res.startupDurationMs)); display(sorted, "Startup time (ms)", res -> String.valueOf(res.startupDurationMs));
display(sorted, "Total allocated MB", res -> format(res.getTotalAllocatedMB())); display(sorted, "Total allocated MB", res -> format(res.getTotalAllocatedMB()));
display(sorted, "Heap (min)", res -> String.valueOf(res.heapUsed.min)); display(sorted, "Heap (min)", res -> String.valueOf(res.heapUsed.min));

View File

@ -77,7 +77,17 @@ public class ResultsCollector {
.maxThreadContextSwitchRate(readMaxThreadContextSwitchRate(jfrFile)) .maxThreadContextSwitchRate(readMaxThreadContextSwitchRate(jfrFile))
.peakThreadCount(readPeakThreadCount(jfrFile)) .peakThreadCount(readPeakThreadCount(jfrFile))
.averageNetworkRead(computeAverageNetworkRead(jfrFile)) .averageNetworkRead(computeAverageNetworkRead(jfrFile))
.averageNetworkWrite(computeAverageNetworkWrite(jfrFile)); .averageNetworkWrite(computeAverageNetworkWrite(jfrFile))
.averageJvmUserCpu(computeAverageJvmUserCpu(jfrFile))
.maxJvmUserCpu(computeMaxJvmUserCpu(jfrFile));
}
private float computeAverageJvmUserCpu(Path jfrFile) throws IOException {
return JFRUtils.computeAverageFloat(jfrFile, "jdk.CPULoad", "jvmUser");
}
private float computeMaxJvmUserCpu(Path jfrFile) throws IOException {
return JFRUtils.findMaxFloat(jfrFile, "jdk.CPULoad", "jvmUser");
} }
private long computeAverageNetworkRead(Path jfrFile) throws IOException { private long computeAverageNetworkRead(Path jfrFile) throws IOException {

View File

@ -40,6 +40,12 @@ public class JFRUtils {
AverageSupport::add).average(); AverageSupport::add).average();
} }
public static float computeAverageFloat(Path jfrFile, String eventName, String valueKey) throws IOException {
return reduce(jfrFile, eventName, valueKey,
new AverageFloatSupport(),
AverageFloatSupport::add).average();
}
private static <T, V> T reduce(Path jfrFile, String eventName, private static <T, V> T reduce(Path jfrFile, String eventName,
String valueKey, T initial, BiFunction<T,V,T> reducer) throws IOException { String valueKey, T initial, BiFunction<T,V,T> reducer) throws IOException {
RecordingFile recordingFile = new RecordingFile(jfrFile); RecordingFile recordingFile = new RecordingFile(jfrFile);
@ -67,4 +73,18 @@ public class JFRUtils {
return total/count; return total/count;
} }
} }
static class AverageFloatSupport {
long count;
float total;
AverageFloatSupport add(float value){
count++;
total += value;
return this;
}
float average(){
if(count == 0) return -1;
return total/count;
}
}
} }