Мне известен отличный инструмент async_profiler , и я использую его для профилирования своих производственных проектов.Здесь я хочу понять, что такое perf
и как понять его вывод.
Я играю с перфом, чтобы сэмплировать трассировки стека.Я запускаю JVM с параметрами -XX:+UnlockDiagnosticVMOptions -XX:+PreserveFramePointer -XX:+ShowHiddenFrames
, чтобы избежать путаницы при трассировке стека.
Я запустил его с помощью команды sudo perf record -e cycles -g -p <my_pid>
, чтобы отобрать у обоих пользователей трассировки стека ядра и сравнить полученный процент.Вот что я получил:
Символ start_thread
кажется мне понятным.Они пришли из libjvm.so
, и я могу предположить, что я запустил свой 3 Worker Thread, чтобы выполнить какую-то работу, и это именно то, что я вижу здесь.Шестнадцатеричные числа кажутся адресами скомпилированных инструкций java-кода во время выполнения.
ВОПРОС: Но откуда взялся perf-27405.map
и почему он появился сверху.