This repository contains a set of benchmarks to assess the performance of different OpenTracing components and/or libraries. Some tests might include concrete implementations, such as Jaeger and Haystack, mostly for sanity checking purposes.
List of current tests:
Test | No Instrumentation | Noop Tracer | Mock Tracer | Jaeger Tracer | Haystack Tracer |
---|---|---|---|---|---|
Throughput, one span, one tag, one log message | ✓ | ✓ | ✓ | ✓ | ✓ |
Time, one span, one tag, one log message | ✓ | ✓ | ✓ | ✓ | ✓ |
Each benchmark contains common packages to the same purpose:
opentracing-benchmark-spring-cloud
│
│
└───io.opentracing.contrib.benchmarks
│ │
│ └───config
│ │ ## Classes to initialize the different tracers
│ │
│ └───main
│ │ ## The class to be executed by JMH
│ │
│ └───petclinic
│ │ ## Depending on the test, there is one package which contains the example application to be executed by JMH.
│ │ In this example for opentracing for spring cloud, the official petclinic application is used for the tests.
│ │
│ Benchmark*.java
│ ## The different JMH benchmark tests are located in this package
│ │
And depending on the project there are some specific packages, like listeners
or servlets
, etc.
This properties can be overrided by system properties:
benchmark.warmup.iterations=5
benchmark.test.iterations=5
benchmark.test.forks=1
benchmark.test.threads=1
benchmark.global.testclassregexpattern=.*Benchmark.*
benchmark.global.resultfileprefix=jmh-
Run the following command (inside on a specific project)
mvn clean install
java -jar target/benchmarks.jar
Performance tests are tricky and we are sure that some things might have done better. We welcome your constructive comments and we appreciate PRs.
We use JMH-visualizer to present the benchmark results. Thanks jzillmann for this amazing tool!.
The results of different scenarios are located in each project: