Понимание perf.map - PullRequest
       13

Понимание perf.map

0 голосов
/ 18 сентября 2018

Мне известен отличный инструмент async_profiler , и я использую его для профилирования своих производственных проектов.Здесь я хочу понять, что такое perf и как понять его вывод.

Я играю с перфом, чтобы сэмплировать трассировки стека.Я запускаю JVM с параметрами -XX:+UnlockDiagnosticVMOptions -XX:+PreserveFramePointer -XX:+ShowHiddenFrames, чтобы избежать путаницы при трассировке стека.

Я запустил его с помощью команды sudo perf record -e cycles -g -p <my_pid>, чтобы отобрать у обоих пользователей трассировки стека ядра и сравнить полученный процент.Вот что я получил:

enter image description here

Символ start_thread кажется мне понятным.Они пришли из libjvm.so, и я могу предположить, что я запустил свой 3 Worker Thread, чтобы выполнить какую-то работу, и это именно то, что я вижу здесь.Шестнадцатеричные числа кажутся адресами скомпилированных инструкций java-кода во время выполнения.

ВОПРОС: Но откуда взялся perf-27405.map и почему он появился сверху.

1 Ответ

0 голосов
/ 19 сентября 2018

perf-<pid>.map файл - это способ предоставления perf специфической для приложения карты символов.

В вашем случае один из выбранных указателей команд 0x00000000008e06e0 принадлежит libjvm.so - perf может легко показатьэтот.Но другой 0x00007f557d10c19f принадлежит области анонимной памяти, не поддерживаемой никаким объектным файлом.Это динамически генерируемый код, и perf не может ничего сказать об этом, если кто-то не поможет.perf-<pid>.map файл - это интерфейс для приложения или внешних инструментов для предоставления символьной информации для динамически генерируемого кода.

perf-map-agent является примером такого инструмента для Java.Он заполняет файл perf-<pid>.map информацией о JIT-скомпилированных методах, чтобы perf мог сопоставить эти адреса с именами методов Java.

...