I'm aware of the great async_profiler tool and I use it for profiling my production projects. Here I want to understand about perf
and how to understand its output.
I'm playing around with perf to sample stack traces. I run the JVM with options -XX:+UnlockDiagnosticVMOptions -XX:+PreserveFramePointer -XX:+ShowHiddenFrames
to avoid stack trace messing.
I ran it with command sudo perf record -e cycles -g -p <my_pid>
in order to sample both user an kernel stack traces and compare the resulting percentage. Here is what I got:
The start_thread
symbol seems clear to me. They came from the libjvm.so
and I can make the assumtion that I ran my 3 Worker Thread to do some job and this is exactly what I see here. The hexidecimal numbers seem to be a runtime compiled java-code instructions addresses.
QUESTION: But where did the perf-27405.map
come from and why it appeared on top.