Linux Perf предоставляет низкоуровневое профилирование CPU с JavaScript-, нативными и OS-уровневыми кадрами (frames).
Важно: этот туториал доступен только на Linux.
Linux Perf обычно доступен через пакет linux-tools-common. С помощью либо --perf-basic-prof, либо
--perf-basic-prof-only-functions мы можем запустить приложение на Node.js с поддержкой perf_events.
--perf-basic-prof всегда пишет в файл (/tmp/perf-PID.map), что может привести к бесконечному росту диска.
Если это беспокоит, используйте либо модуль linux-perf,
либо --perf-basic-prof-only-functions.
Основное различие между ними в том, что --perf-basic-prof-only-functions производит меньше вывода; это подходящий вариант
для production-профилирования.
# Запускаем приложение и получаем PID
$ node --perf-basic-prof-only-functions index.js &
[1] 3870Затем записываем события с нужной частотой:
$ sudo perf record -F 99 -p 3870 -gНа этой фазе вы можете захотеть провести нагрузочный тест на приложении, чтобы сгенерировать больше записей для надёжного анализа. Когда работа сделана, закройте процесс perf, отправив SIGINT (Ctrl-C) команде.
perf сгенерирует файл внутри папки /tmp, обычно называемый /tmp/perf-PID.map
(в примере выше: /tmp/perf-3870.map), содержащий трейсы для каждой вызванной функции.
Чтобы агрегировать эти результаты в конкретный файл, выполните:
$ sudo perf script > perfs.outСырой вывод может быть немного трудным для понимания, поэтому обычно сырой файл используют для генерации flame graph для лучшей визуализации.

Чтобы сгенерировать flamegraph из этого результата, следуйте этому туториалу начиная с шага 6.
Поскольку вывод perf не является node-специфичным инструментом, у него могут быть проблемы с тем, как JavaScript-код оптимизируется в
Node.js. См. проблемы вывода perf для
дополнительной справки.