У меня есть приложение, которое читает папку, полную .tar.gz
файлов, по одному и записывает обработанные данные на диск. Все работает с потоками, и в памяти не должно быть больше, чем пара сотен обещаний в очереди.
Однако за пару часов объем занятой памяти увеличивается с ~ 60 МБ до 2 ГБ, и при этом точка, происходит сбой узла.
Я создал для кучи моментальных снимков приложения.
Один создан через некоторое время работы, когда Resident Set был около 80 МБ, как сообщает process.memoryUsage()
:
Один раз намного дольше, RSS равен ~ 120 МБ:
Хотя нигде не было накоплено 2 ГБ за ночь, мы можем видеть TypedArrays
(я думаю, что там есть количество стэрам-буферов?) И System Objects
значительно выросли.
Прежде всего, почему это так? намного меньше, чем использование памяти, сообщаемое системой (~ 12 МБ против ~ 150 МБ)? Во-вторых, основываясь на этом росте, мы можем экстраполировать и предположить, что типизированные массивы и системные объекты продолжали расти и были одной из причин, которые со временем стали причиной чрезмерного использования памяти.
Следовательно, что именно представляют собой типизированные массивы? Как они связаны с потоками? А что такое системные объекты?
process.memoryUsage из третьего сеанса, немного длиннее второго:
{
"rss": 149794816,
"heapTotal": 51036160,
"heapUsed": 12103496,
"external": 1531733,
"arrayBuffers": 329913
}