Not a customer? Click the 'Start a free trial' link to begin a 30-day SaaS trial of our product and to join our community.
Existing Cisco AppDynamics customers should click the 'Sign In' button to authenticate to access the community
on
08-13-2020
02:25 PM
- edited on
10-28-2020
08:31 AM
by
Claudia.Landiva
When using an AppDynamics Java agent with a newer IBM JVM, customers don’t have to choose between dynamic instrumentation or excellent performance. The newer releases for Java 8 don’t exhibit the same performance penalty when class retransformation is enabled.
In the past, we discovered poor performance of IBM J9 JVM when the application ran with the AppDynamics Java agent. This poor performance, which could be visible as increased CPU usage and increased transaction latency, was often perceived as "Agent overhead,” and attributed to the AppDynamics Java agent.
But as a matter of fact, we also observed the poor performance occurred when the Java agent was entirely disabled.
Through our investigation of the issue, we discovered a simple root cause: whenever an AppDynamics Java agent declared its ability to redefine or re-transform classes, the performance of the Java application code running in the JVM was affected, even if the retransforming functionality was never used, and also if the application code in question was not instrumented.
This observation led us to provide our customers with two versions of the Java agent:
We also added workarounds such as additional transformation rules and writing some runtime BCI rules to a filesystem. It left our customers using IBM JVMs with a choice: either they had dynamic instrumentation or excellent performance, but not both.
Since then, IBM has changed the implementation of their JVM. The release for Java 8 (and presumably later) does not exhibit the same performance penalty when class retransformation is enabled. When using an AppDynamics Java agent with a newer IBM JVM, customers do not have to give up anything; they can have it all.
Starting August 2020, three versions of the AppDynamics Java agent will be generally available:
Standard |
|
Legacy
|
|
Legacy
|
|
Below is an effort to quantify the performance impact based on the JVM version.
The program used for this test comes from an old SPEC benchmark but is modified to inflate the execution time for better stability of the results.
The program produces 500 high-resolution frames (images) using a rendering technique known as ray tracing. It uses only one thread that saturates a single CPU core during execution. The Java agent is present in the JVM without applying instrumentation, thus the overhead we see is purely as a result of turning on the re-transformation feature.
JVM Release |
EXECUTION TIME (seconds) |
Observed overhead |
|
without the agent |
with agent declaring class retransformation capability |
||
IBM J9 Java 6 |
114.638 |
158.515 |
38.27% |
IBM J9 Java 8 |
117.65 |
119.368 |
1.46% |
Oracle HotSpot Java 8 |
^78.485 |
79.922 |
1.83% |
^ Legend:
Thank you! Your submission has been received!
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form