Off-CPU Profiling & Latency Diagnostics in Java
summary
A new profiler captures full transactions end-to-end and reports percentile-latency plus a per-transaction breakdown into on-CPU time, scheduling delay, I/O wait so outliers no longer hide in flame graphs. It combines Java instrumentation + Linux uprobe to stitch wakeups, context switches and thread dependencies into dependency chains; examples include reducing TPC‑DS Q28 from 52s to 35s by shrinking heap to relieve IO wait, diagnosing a SpecJBB P50 rise caused by doubled injector chains and scheduling cost, and quantifying virtual‑thread and GC pause effects with concrete P50/P99 numbers.
AI-written summary · about
chapters (12)
- 0:00Introduction
- 4:21Off-CPU profiling in Java
- 9:01Latency trends and GC
- 14:27IO awareness in JVM
- 16:13Latency profiling challenges
- 18:20Demo setup and SpecJBB issue
- 21:56RT Radar for transactions
- 27:45Transaction dependency chains
- 34:30Root cause of latency
- 35:36RT Radar methodology
- 37:00Instrumentation and virtual threads
- 41:17Summary
related talks
40mProfiling Without Pain: Always-On Performance for the JVM
56mJava Performance Analysis
45mJDK 25's new CPU-Time Profiler
46mJava Deep Dive - the ins and outs of profiling
33mWriting a Java Profiler in Pure Java
50mObservability Beyond the Three Pillars — Continuous Profiling With Alibaba Dragonwell
39mFive most useful profiling techniques to use with modern Java apps
41mUnleash the Power of Open-Source Java Profilers
