Подтвердить что ты не робот

Обнаружение утечек памяти в узлах

Существуют ли некоторые инструменты для обнаружения утечек памяти в узлах? И расскажите мне о своем опыте тестирования приложений nodejs.

4b9b3361

Ответ 1

Следующий инструмент должен быть полезен для обнаружения утечек памяти:

node-inspector

А также учебник, который поможет вам найти утечки памяти здесь:

https://github.com/felixge/node-memory-leak-tutorial

Ответ 2

При отслеживании утечки памяти я попробовал вышеуказанный node -инспектор.
По состоянию на апрель 2012 года он не обновлялся для работы с современной версией node v0.6.12 Как таковой я нашел: https://github.com/c4milo/node-webkit-agent.
Он смог показать снимки кучи для нового двигателя V8, который не поддерживался node -инспектором. Вкратце я смог обнаружить протекающий модуль (в случае случайного логарифма), надеюсь, у вас будет такой же успех!

Ответ 3

Я также могу рекомендовать следующие источники:

  • следующие эпизоды NodeUp, где обсуждаются инструменты обнаружения профайлинга и памяти:

  • Эта статья - Отслеживание утечек памяти в Node.js - A Node.JS Holiday Season, который в основном объединяет все широко известные модули и методы для отслеживания утечек памяти.

  • Для Mac OS - Instruments инструмент может быть полезен для отладки собственных (С++) модулей. Он не настолько утончен, как инструменты SmartOS, но очень прост в настройке.

Ответ 4

Я использую инструменты Chrome dev и файл heapsnapshot напрямую, а не node -инспектор или node -webkit-agent.

require() модуль heapdump.

Отправьте сигнал usr2 на рабочий процесс nodejs, чтобы получить файл heapsnapshot.

Загрузите файл heapsnapshot на вкладке профилей инструментов Chrome dev.

Ответ 5

Метод 1 -
Node позволяет нам вручную запускать сборку мусора, и это первое, что мы должны сделать, пытаясь подтвердить утечку памяти. Это можно сделать, выполнив Node с флагом -expose-gc (т.е. Node --expose-gc index.js). Как только Node работает в этом режиме, вы можете программно запускать сборку мусора в любое время, вызывая global.gc() из вашей программы.

Вы также можете проверить объем памяти, используемый вашим процессом, вызывая process.memoryUsage(). heapUsed.

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

Метод 2 -

3 Метод кучи кучи

Node s - флаг insins приземлился в версии Node версии 6. Эта функция позволяет вам отлаживать и проверять ваш Node процесс из Chromes DevTools.

Просто запустите приложение, передав флаг --inspect:

$ node --inspect index.js

Следуйте URL-адресу инспектора и перейдите на вкладку памяти.

Вкладка памяти DevTools

введите описание изображения здесь Вот что мы будем делать:

Нажмите приложение с автозапуском -c 1 -d 60 http://localhost:PORT
[https://www.npmjs.com/package/autocannon]
Сделайте снимок кучи примерно через 10 секунд и снова через 30 секунд.

Сравнение снимков кучи
В представлении сравнения показано, что произошло между моментальными снимками. Вы можете увидеть, что огромное количество объектов было создано или не собирается GC.

Пожалуйста, прочитайте эти удивительные статьи, чтобы узнать больше. Они очень помогли найти и устранить утечку: -

https://www.alexkras.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/

https://www.nearform.com/blog/self-detect-memory-leak-node/

https://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/

Ответ 6

Хорошо. https://github.com/bnoordhuis/node-heapdump очень просто, и вы можете просматривать результаты в Chrome (из-за того же V8-движка в браузере javascript и nodejs) и сравнивать размеры объектов в памяти в каждый момент, когда вы хотите.

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

Запустите приложение с помощью node --expose-gc file.js "и в любом месте кода вы можете использовать функцию gc(); для вызова сборки мусора.

Ответ 7

Я использовал пакет npm Memwatch:

Взгляните на репозиторий Github и Источник NPM

В основном этот пакет проверяет использование кучи памяти сразу после сборки мусора с помощью двигателя V8 и дает вам базовый уровень фактического использования памяти.

Вот как я его использовал:

var memwatch = require('memwatch');

memwatch.on('leak', function(info) {
    console.log('Memwatch leak: ');
    console.log(info);
});

memwatch.on('stats', function(stats) {
    console.log.message('Memwatch stats: ');
    console.log(stats);
});

Из оригинальной документации:

Событие 'stats', испускаемое иногда, дает вам данные, описывающие ваше использование кучи и тенденции с течением времени.

Событие 'leak' выдается, когда появляется ваш код, протекающий Память. Обычно он выполняется, когда размер кучи постоянно растет короткий период времени.

Memwatch также предоставляет класс "HeapDiff" для вычисления состояния кучи между двумя моментальными снимками, которые вы можете выполнять в своих функциях.

Возможно, неплохо было бы запустить memwatch в вашей сцене, чтобы отслеживать события, вызывающие проблему.