Java
The first question everyone asks us is - "This is very cool. Tell me how does this impact my system's performance?"
TLDR: We have very minimal impact on your system's latency - a few milliseconds under heavy load. Moreover, if there are no tracepoints / logpoints - we add zero overheads.
We did a benchmarking of our agent's performance under the following conditions:
Code used spring-petclinic - developed by the Spring community itself for a fair comparison.
The application was deployed on aws t2.2xlarge instance which has 8vCPUs and 32GB RAM.
We used the popular wrk2 tool to measure network latency.
For load-balancing, we scaled the application to 4 instances. We loaded the application with 1000 requests per second until 5 seconds.
Endpoint called: /vets.html
3 separate experiments were done:
Agentless - running the application without heimdall agent.
Passive - heimdall agent runs without any tracepoint.
Active - heimdall agent runs with tracepoint on the endpoint.
Results
Agentless | Passive | Active | |
---|---|---|---|
Average latency (ms) | 2.23 | 2.31 | 2.89 |
50 percentile (ms) | 1.93 | 2.05 | 2.09 |
75 percentile (ms) | 2.20 | 2.36 | 2.48 |
90 percentile (ms) | 2.56 | 2.64 | 3.19 |
99 percentile (ms) | 11.67 | 12.85 | 16.83 |
Interpretation
When you're using us, most of the time your application would be running in passive mode, i.e., our agent is running without any tracepoint. In such case, our application adds negligible overhead.
You can import our agent in your application without worrying about overheads.
When you're debugging something and have added tracepoints, we add a few milliseconds of latency. You get options to set hitlimit and lifetime for the tracepoint so that the tracepoint lives for a very short time until you get your desired data.
Last updated