Я пытаюсь выполнить профилирование nodejs с использованием Linux perf_events, как описано Brendan Gregg здесь.
Последовательность действий:
- запустите node > 0.11.13 с
--perf-basic-prof
, который создает файл/tmp/perf-(PID).map
, в котором записано отображение символов JavaScript. - Захват стеков с помощью
perf record -F 99 -p `pgrep -n node` -g -- sleep 30
- Сложите стеки с помощью
stackcollapse-perf.pl
script из этот репозиторий - Генерировать диаграмму пламени svg с помощью
flamegraph.pl
script
Я получаю следующий результат (который выглядит очень красиво в начале):
Проблема в том, что существует много элементов [unknown]
, которые, я полагаю, должны быть моими вызовами функции nodejs. Я предполагаю, что весь процесс терпит неудачу в точке 3, где перфорированные данные должны быть свернуты с помощью сопоставлений, созданных с помощью node/v8, выполненных с помощью --perf-basic-prof
. Создается файл /tmp/perf-PID.map
, и в процессе выполнения node записывается некоторое сопоставление.
Как решить эту проблему?
Я использую CentOS 6.5 x64 и уже пробовал это с помощью node 0.11.13, 0.11.14 (как для предварительной сборки, так и для компиляции) без успеха.