Profiling Without Pain: Always-On Performance for the JVM
summary
A Quarkus feature-flag service with Postgres shows 1.48s traces and 10s GC-driven spikes until memory is increased; an N+1 Hibernate query is fixed with a JPQL join and per-request latency drops to tens of ms. Continuous profiling using Java Flight Recorder combined with async-profiler and Pyroscope ties samples to OpenTelemetry traces, reveals native compression CPU hot paths and lock contention invisible to CPU-only sampling, and cuts a slow endpoint from ~500ms P99 to ~8ms average (P99 23ms) with ~1–2% overhead.
AI-written summary · about
chapters (10)
- 0:00Introduction
- 1:19Feature flag service for profiling
- 3:51Diagnosing with metrics and GC
- 6:56Traces for N+1 queries
- 12:30Traditional profilers' limits
- 17:04Sampling profilers in JVM
- 23:23Java Flight Recorder tools
- 28:18Pyroscope for production
- 32:08Flame graphs analysis
- 37:01Key takeaways
related talks
46mProfiling your Java Application A Beginner’s Guide
42mOff-CPU Profiling & Latency Diagnostics in Java
47mJVM Performance Engineering - Inside OpenJDK and the HotSpot Java Virtual Machine
41mUnleash the Power of Open-Source Java Profilers
42mNative Cloud Native with Java, Quarkus and MicroProfile
36mProfiling in the cloud-native era - Matthias Loibl
25mPerfect Match: Correlating Continuous Profiling with Distributed Tracing for Stronger Observability
52mThe missing piece in your observability puzzle!
