in alpha/alpha-benchmark/src/main/java/org/apache/servicecomb/pack/alpha/benchmark/SagaEventBenchmark.java [50:108]
public void send(int warmUpConcurrency, int requests, int concurrency) {
this.warmUpConcurrency = warmUpConcurrency;
this.warmUpRequests = 10;
System.out.print("Benchmarking ");
// 预热
if (warmUpConcurrency > 0) {
metrics = new BenchmarkMetrics();
this.warmUp(warmUpConcurrency);
}
// 压测
metrics = new BenchmarkMetrics();
metrics.setRequests(requests);
metrics.setConcurrency(concurrency);
long s = System.currentTimeMillis();
CountDownLatch begin = new CountDownLatch(1);
CountDownLatch end = new CountDownLatch(concurrency);
begin.countDown();
String[] id_prefixs = generateRandomIdPrefix(concurrency);
for (int i = 0; i < concurrency; i++) {
Execute execute = new Execute(sender, id_prefixs[i],requests / concurrency, begin, end);
new Thread(execute).start();
}
try {
end.await();
long e = System.currentTimeMillis();
metrics.setTimeTaken(e - s);
System.out.println("\n");
System.out.println(String.format("%-25s %s", "Warm Up", warmUpRequests * warmUpConcurrency));
System.out.println(String.format("%-25s %s", "Concurrency Level", metrics.getConcurrency()));
System.out.println(
String.format("%-25s %s", "Time taken for tests", metrics.getTimeTaken() + " seconds"));
System.out
.println(String.format("%-25s %s", "Complete requests", metrics.getCompleteRequests()));
System.out.println(String.format("%-25s %s", "Failed requests", metrics.getFailedRequests()));
System.out.println(String
.format("%-25s %s", "Requests per second", metrics.getRequestsPerSecond() + " [#/sec]"));
System.out.println(
String.format("%-25s %s", "Time per request", metrics.getTimePerRequest() + " [ms]"));
System.out.println();
System.out.println("Percentage of the requests served within a certain time (ms)");
int size = metrics.getTransactionTime().size();
int percentage = 50;
for (int i = 0; i <= 5; i++) {
float peek = size * ((float) percentage / 100);
System.out.println(String.format("%-5s %.2f", percentage + "%", getAverage(
metrics.getTransactionTime().subList(0, (int) peek)).getAsDouble()));
percentage = percentage + 10;
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
LOG.error(e.getMessage(), e);
}
LOG.info("OK");
}