Что хранится в куче в NodeJS - PullRequest
       110

Что хранится в куче в NodeJS

0 голосов
/ 07 октября 2019

У меня есть много "не очень хорошо" написанных сценариев JavaScript, которые я запускаю в среде nodejs. Он содержит утечки памяти, бесконечные циклы и любой код, который может производить «обычный» (непрограммистский) пользователь.

При случайном анализе выполнения этих «сценариев» я обнаружил, что некоторые из них имеют огромный rss область памяти, скажем, около 1,0 ГБ , тогда как heapTotal может быть «просто» около 450 МБ .

Несмотря на чтение сообщений в блоге о расположении памяти в nodejs, я не могу объяснить / смоделировать такую ​​"утечку". Я попытался создать heapdump , но, очевидно, я не найду того, что хранится в «области стека», потому что я не сделал дамп этой зоны.

Кто-нибудь знает, что должно происходить в исходном кодетаким образом, мы пропускаем всю память, в то время как размер кучи намного меньше, т. е. как бы выглядел «злой исходный код», чтобы съесть пространство из кучи?

РЕДАКТИРОВАТЬ :

Iобнаружил, что это довольно просто: const c = Buffer.alloc(1024

1024, 1) потребляет 1 ГБ вне кучи. Возникает новый вопрос: как можно «очистить» это пространство и освободить память? Как я могу обнаружить негерметичные буферы? Перезапуск это единственный способ? *1024*
...