This project is a low overhead sampling profiler for Java that does not suffer from the Safepoint bias problem. It features HotSpot-specific API to collect stack traces and to track memory allocations. The profiler works with OpenJDK and other Java runtimes based on the HotSpot JVM.
Unlike traditional Java profilers, async-profiler monitors non-Java threads (e.g., GC and JIT compiler threads) and shows native and kernel frames in stack traces.
What can be profiled:
- CPU time
- Allocations in Java Heap
- Native memory allocations and leaks
- Contended locks
- Hardware and software performance counters like cache misses, page faults, context switches
- and more.
See our 3 hours playlist to learn about more features.
Current release (3.0):
-
Linux x64: async-profiler-3.0-linux-x64.tar.gz
-
Linux arm64: async-profiler-3.0-linux-arm64.tar.gz
-
macOS x64/arm64: async-profiler-3.0-macos.zip
-
Converters between profile formats: converter.jar
From html collapsed pprof pb.gz collapsed ✅ ✅ ❌ ❌ html ✅ ✅ ❌ ❌ jfr ✅ ✅ ✅ ✅
Nightly releases (published on each commit to master)
For the build corresponding to a previous commit, go to Nightly Builds, click the desired build and scroll down to the artifacts section. These binaries are kept for 30 days.
Officially maintained builds | Other available ports | |
---|---|---|
Linux | x64, arm64 | x86, arm32, ppc64le, riscv64, loongarch64 |
macOS | x64, arm64 |
In a typical use case, profiling a Java application is just a matter of a running asprof
with a PID of a
running Java process.
$ asprof -d 30 -f /tmp/flamegraph.html <PID>
The above command translates to: run profiler for 30 seconds and save results to /tmp/flamegraph.html
as an interactive Flame Graph
that can be viewed in a browser.
- CPU Sampling Engines
- Stack Walking Modes
- Advanced Stacktrace Features
- Profiling Non-Java Applications
For known issues faced while running async-profiler and their detailed troubleshooting, please refer here.