На этой странице

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

Затем записываем события с нужной частотой:

На этой фазе вы можете захотеть провести нагрузочный тест на приложении, чтобы сгенерировать больше записей для надёжного анализа. Когда работа сделана, закройте процесс perf, отправив SIGINT (Ctrl-C) команде.

perf сгенерирует файл внутри папки /tmp, обычно называемый /tmp/perf-PID.map (в примере выше: /tmp/perf-3870.map), содержащий трейсы для каждой вызванной функции.

Чтобы агрегировать эти результаты в конкретный файл, выполните:

Сырой вывод может быть немного трудным для понимания, поэтому обычно сырой файл используют для генерации flame graph для лучшей визуализации.

Пример flamegraph для nodejs

Чтобы сгенерировать flamegraph из этого результата, следуйте этому туториалу начиная с шага 6.

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