JVM (Java, Kotlin, Scala)
External profiler: async-profiler (Apache-2.0). Sample types: cpu (-e cpu), wall (-e wall), alloc (-e alloc), lock (-e lock). Span links: no. JFR recordings are accepted natively (format=jfr, JDK 11+ chunks; gzip is fine): jdk.ExecutionSample becomes cpu, jdk.NativeMethodSample wall, allocation events alloc_space and jdk.JavaMonitorEnter / jdk.ThreadPark lock_contention, with the thread name as the thread label. The collapsed output keeps working.
asprof -e cpu -d 60 -o collapsed -f cpu.collapsed <pid>
wtctl profile upload cpu.collapsed --service checkout --version 1.4.2 --format foldedNative JFR:
jcmd <pid> JFR.start duration=60s filename=rec.jfr
wtctl profile upload rec.jfr --service checkout --version 1.4.2 --format jfrFixture: fixtures/async-profiler.collapsed. Alloc and lock runs are different sample types; upload each as its own file. The key needs ingest:profiles; delivery is at-least-once.
Updated