Tracing distributed services: experiences with implementing APM for the JVM
summary
An APM implementation for the JVM uses a Java agent and bytecode rewriting to inject Zipkin/Brave-style spans without changing app code, instruments servlets and frameworks via Byte Buddy, attaches to running JVMs (agentmain), and ships spans to a collector (Kafka) for UI graphs. It adds adaptive sampling, thread-context propagation and primitive object pooling to cut GC and overhead, warns about JIT/monomorphism pitfalls, validates plugins across versions with Testcontainers, and proves practical but non‑zero performance cost.
AI-written summary · about
chapters (6)
- 0:00Introduction to APM
- 7:26Why APM tools are needed
- 13:47How distributed tracing works
- 20:57Java agents for tracing
- 36:18Challenges with tracing
- 53:51Final insights and Q&A
related talks
45mLatency tracing in distributed Java applications
46mApplication Performance Monitoring for Your Java Projects
20mSuper vision smart goggles
38mApplication Performances Monitoring with Elastic APM and the ELK Stack
48mSetting up monitoring for Java apps
41mMeasuring the Moving Parts of User Experience in Java/.NET applications
37mMake your Java application observable with no code changes using OpenTelemetry
49mDistributed Tracing in Java? OpenTelemetry for the Rescue!
