У меня есть много "не очень хорошо" написанных сценариев JavaScript, которые я запускаю в среде nodejs. Он содержит утечки памяти, бесконечные циклы и любой код, который может производить «обычный» (непрограммистский) пользователь.
При случайном анализе выполнения этих «сценариев» я обнаружил, что некоторые из них имеют огромный rss
область памяти, скажем, около 1,0 ГБ , тогда как heapTotal
может быть «просто» около 450 МБ .
Несмотря на чтение сообщений в блоге о расположении памяти в nodejs, я не могу объяснить / смоделировать такую "утечку". Я попытался создать heapdump , но, очевидно, я не найду того, что хранится в «области стека», потому что я не сделал дамп этой зоны.
Кто-нибудь знает, что должно происходить в исходном кодетаким образом, мы пропускаем всю память, в то время как размер кучи намного меньше, т. е. как бы выглядел «злой исходный код», чтобы съесть пространство из кучи?
РЕДАКТИРОВАТЬ :
Iобнаружил, что это довольно просто: const c = Buffer.alloc(1024
1024, 1) потребляет 1 ГБ вне кучи. Возникает новый вопрос: как можно «очистить» это пространство и освободить память? Как я могу обнаружить негерметичные буферы? Перезапуск это единственный способ? *1024*