Профилировщик кучи (heap profiler) работает поверх V8, чтобы захватывать аллокации во времени. В этом документе мы рассмотрим профилирование памяти с помощью:
- Allocation Timeline (таймлайн аллокаций)
- Sampling Heap Profiler (сэмплирующий профилировщик кучи)
В отличие от дампов кучи, которые рассматривались в руководстве Использование Heap Snapshot, идея профилирования в реальном времени — понять аллокации за некоторый период времени.
Heap Profiler похож на Sampling Heap Profiler, за исключением того, что он трассирует каждую аллокацию. У него более высокие накладные расходы, чем у Sampling Heap Profiler, поэтому использовать его в production не рекомендуется.
Можно использовать @mmarchini/observe, чтобы запускать и останавливать профилировщик программно.
Запустите приложение:
node --inspect index.jsДля скриптов лучше выбрать
--inspect-brk.
Подключитесь к экземпляру dev-tools в Chrome, а затем:
- Выберите вкладку
Memory. - Выберите
Allocation instrumentation timeline. - Начните профилирование.
![шаг 1 туториала по heap profiler][heap profiler tutorial 1]
Как только профилирование кучи запущено, настоятельно рекомендуется прогнать нагрузку (samples),
чтобы выявить проблемы с памятью. Например, если бы мы профилировали
веб-приложение, мы могли бы использовать Apache Benchmark для создания нагрузки:
$ ab -n 1000 -c 5 http://localhost:3000Затем нажмите кнопку stop, когда нагрузка завершится:
![шаг 2 туториала по heap profiler][heap profiler tutorial 2]
Наконец, посмотрите на данные снапшота:
![шаг 3 туториала по heap profiler][heap profiler tutorial 3]
Смотрите раздел полезные ссылки для дополнительной информации о терминологии памяти.
Sampling Heap Profiler отслеживает паттерн аллокации памяти и зарезервированное пространство во времени. Поскольку он основан на сэмплировании, его накладные расходы достаточно малы, чтобы использовать в production-системах.
Можно использовать модуль
heap-profiler, чтобы запускать и останавливать профилировщик кучи программно.
Запустите приложение:
$ node --inspect index.jsДля скриптов лучше выбрать
--inspect-brk.
Подключитесь к экземпляру dev-tools, а затем:
- Выберите вкладку
Memory. - Выберите
Allocation sampling. - Начните профилирование.
![шаг 4 туториала по heap profiler][heap profiler tutorial 4]
Создайте некоторую нагрузку и остановите профилировщик. Он сгенерирует сводку с аллокациями на основе их стек-трейсов. Вы можете сосредоточиться на функциях с наибольшим числом аллокаций в куче, см. пример ниже:
![шаг 5 туториала по heap profiler][heap profiler tutorial 5]