Инструменты для анализа дампа ядра из Node.js - PullRequest
19 голосов
/ 02 января 2012

Если я использую gcore для создания дампа кода процесса Node.js, каковы лучшие инструменты для его анализа?

Вдохновлен: Инструментом для анализа дампа ядра Java

В моем конкретном случае я заинтересован в расследовании некоторых утечек памяти, поэтому мне действительно любопытно провести анализ кучи.Общие инструменты и даже пакеты инструментов и методов также приветствуются.Я нахожу Node.js очень интересным, но инструменты анализа времени выполнения просто еще не созданы.

Ответы [ 3 ]

16 голосов
/ 02 января 2012

Для расследования сбоев я обнаружил, что node-segfault-handler неоценим. Это модуль, который я подготовил, чтобы получить трассировку стека собственного кода в случае жесткого сбоя с сигналом - например, разыменование NULL, приводящее к SIGSEGV

Для изучения проблем с памятью / распределением, вот некоторые данные, которые я собрал до сих пор:

1) Запись в блоге Дэйва Патеко - автор рассказывает об использовании плагина для MDB для получения JS-стеков и тому подобного. К сожалению, насколько я могу судить, источник этого плагина так и не был выпущен (ни какой-либо двоичной формы).

2) Посмертная отладка в динамических средах - статья ACM Queue, также написанная Дэйвом Патеко (ссылка на этот пост в блоге). Несмотря на то, что статья предназначена для БОЛЬШОГО начального чтения, статья не содержит много конкретных инструментов и техник.

3) node-panic - Инструмент чистого JS для вывода состояния в случае сбоя типа assert-fail. Ничего не помогает для отладки сбоев, возникающих из-за ошибок собственного кода (SIGSEGV и т. Д.)

4) Joyent: отладка производственных систем - поговорите с Брайаном Кэнтрилл об инструментах и ​​методах, которые он рекомендует (thx crickeys).

8 голосов
/ 14 октября 2016

В Linux и Mac вы можете использовать llnode плагин для отладчика lldb. Проект доступен в организации nodejs на github:

https://github.com/nodejs/llnode

Вы можете установить из исходного кода через github или использовать brew на Mac. Файл readme на github должен помочь вам установить его, а здесь есть вводная статья в блоге:

https://developer.ibm.com/node/2016/08/15/exploring-node-js-core-dumps-using-the-llnode-plugin-for-lldb/

Первоначальный вопрос был об анализе памяти, и команды v8 findjsobjects и v8 findjsinstances помогут в этом, сгенерировав базовую гистограмму количества объектов и позволив вам составить список экземпляров каждого типа.

Здесь есть полная статья об использовании llnode для анализа памяти: http://www.brendangregg.com/blog/2016-07-13/llnode-nodejs-memory-leak-analysis.html

3 голосов
/ 03 марта 2016

2017 обновление: Теперь вы можете использовать решение @ h-hellyer (llnode, основанное на lldb, а не на mdb).https://stackoverflow.com/a/40045103/3221630

mdb + mdb_v8 - это путь.

Чтобы использовать mdb, вам потребуется поддерживаемая ОС.

Теперь, скорее всего, вы будетеработает на Linux.Если это ваш случай:

Часть 1. получить дамп ядра

Вы можете получить дамп ядра разными способами.Чтобы получить дамп ядра из запущенного процесса, вы можете сделать следующее:

pgrep -lf node # get pids
gdb -p your_pid

# once in gdb..
gcore  # this will output your core dump
detach # this will allow the process to continue to run.

Часть 2. использовать mdb

Существует вероятность того, что вы знаете о Solaris, OpenSolaris, IllumOS или SmartOS.Скорее всего, это не так.Если вы можете позволить себе время установки SmartOS и mdb_v8, отлично.

Если нет, установите VirtualBox, а затем autopsy .Это обрабатывает ритуал установки SmartOS, а также выгрузки файлов дампа памяти на виртуальную машину.

Когда вы закончите и во время сеанса mdb, вы сможете выполнить некоторые из следующих шагов презентация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...