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

Профилировщик кучи (heap profiler) работает поверх V8, чтобы захватывать аллокации во времени. В этом документе мы рассмотрим профилирование памяти с помощью:

  1. Allocation Timeline (таймлайн аллокаций)
  2. Sampling Heap Profiler (сэмплирующий профилировщик кучи)

В отличие от дампов кучи, которые рассматривались в руководстве Использование Heap Snapshot, идея профилирования в реальном времени — понять аллокации за некоторый период времени.

Heap Profiler похож на Sampling Heap Profiler, за исключением того, что он трассирует каждую аллокацию. У него более высокие накладные расходы, чем у Sampling Heap Profiler, поэтому использовать его в production не рекомендуется.

Можно использовать @mmarchini/observe, чтобы запускать и останавливать профилировщик программно.

Запустите приложение:

Для скриптов лучше выбрать --inspect-brk.

Подключитесь к экземпляру dev-tools в Chrome, а затем:

  • Выберите вкладку Memory.
  • Выберите Allocation instrumentation timeline.
  • Начните профилирование.

![шаг 1 туториала по heap profiler][heap profiler tutorial 1]

Как только профилирование кучи запущено, настоятельно рекомендуется прогнать нагрузку (samples), чтобы выявить проблемы с памятью. Например, если бы мы профилировали веб-приложение, мы могли бы использовать Apache Benchmark для создания нагрузки:

Затем нажмите кнопку stop, когда нагрузка завершится:

![шаг 2 туториала по heap profiler][heap profiler tutorial 2]

Наконец, посмотрите на данные снапшота:

![шаг 3 туториала по heap profiler][heap profiler tutorial 3]

Смотрите раздел полезные ссылки для дополнительной информации о терминологии памяти.

Sampling Heap Profiler отслеживает паттерн аллокации памяти и зарезервированное пространство во времени. Поскольку он основан на сэмплировании, его накладные расходы достаточно малы, чтобы использовать в production-системах.

Можно использовать модуль heap-profiler, чтобы запускать и останавливать профилировщик кучи программно.

Запустите приложение:

Для скриптов лучше выбрать --inspect-brk.

Подключитесь к экземпляру dev-tools, а затем:

  1. Выберите вкладку Memory.
  2. Выберите Allocation sampling.
  3. Начните профилирование.

![шаг 4 туториала по heap profiler][heap profiler tutorial 4]

Создайте некоторую нагрузку и остановите профилировщик. Он сгенерирует сводку с аллокациями на основе их стек-трейсов. Вы можете сосредоточиться на функциях с наибольшим числом аллокаций в куче, см. пример ниже:

![шаг 5 туториала по heap profiler][heap profiler tutorial 5]