2013-06-19 4 views
1

Я пытаюсь использовать node-memwatch для отслеживания утечек памяти в моем приложении. В настоящее время я создаю HeapDiff, когда приложение запускается, а затем выполняет diff, когда mem-часы обнаруживают утечку. Я нашел несколько элементов, которые выглядят подозрительными, но я не понимаю, как мне сопоставить то, что сообщается моему коду. Например, в документе сообщается следующий пункт:Отслеживание утечек памяти с помощью node-memwatch?

{ what: 'String', 
    size_bytes: 4785072, 
    size: '4.56 mb', 
    '+': 32780, 
    '-': 563 }, 

Это похоже на главный подозреваемый в утечке памяти. Как я могу выяснить, какая часть моего кода вызывает эту утечку? В примерах, которые они дают на их сайте, what, как правило, что-то очевидно, как MyLeakyClass, а не тип системы ...

ответ

1

кажется, что функция еще не реализована:

«В частности, мы хотим node- memwatch, чтобы иметь возможность предоставить некоторые примеры просочившегося объекта (например, имена переменных, индексы массивов или код замыкания). "

https://hacks.mozilla.org/2012/11/tracking-down-memory-leaks-in-node-js-a-node-js-holiday-season/

LeakingClass пример должен был дан из этого кода: https://github.com/lloyd/node-memwatch/blob/master/examples/basic_heapdiff.js

1

Что это означает, что вы создали 32780 строк, и мусора 563, так как, начиная свой HeapDiff. (те, которые вы собрали, могут или не могут быть созданы в этом окне, они могли существовать уже при запуске diff). Общий объем памяти, используемой строками, вырос на 4,56 мб. Все это может быть в одной строке или равномерно распределено между строками 32k. У вас нет данных об этом.

Строки, конечно, отображаются на всем протяжении вашего кода. Поэтому мой совет: не смотрите на них. Ищите объекты с более удобочитаемыми (greppable, rerer, whatever) именами, которые растут, даже если они, похоже, растут меньше, чем ваши строки, и отслеживайте их. В этом процессе вы можете обнаружить большие утечки.

Смежные вопросы