add average and max cpu to results. (#3940)
This commit is contained in:
parent
ec585c7717
commit
68d26a2bba
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue