NodeJS утечка памяти - что такое System Object и Typed Arrays? - PullRequest
1 голос
/ 23 марта 2020

У меня есть приложение, которое читает папку, полную .tar.gz файлов, по одному и записывает обработанные данные на диск. Все работает с потоками, и в памяти не должно быть больше, чем пара сотен обещаний в очереди.

Однако за пару часов объем занятой памяти увеличивается с ~ 60 МБ до 2 ГБ, и при этом точка, происходит сбой узла.

Я создал для кучи моментальных снимков приложения.

Один создан через некоторое время работы, когда Resident Set был около 80 МБ, как сообщает process.memoryUsage():

enter image description here

Один раз намного дольше, RSS равен ~ 120 МБ:

enter image description here

Хотя нигде не было накоплено 2 ГБ за ночь, мы можем видеть TypedArrays (я думаю, что там есть количество стэрам-буферов?) И System Objects значительно выросли.

Прежде всего, почему это так? намного меньше, чем использование памяти, сообщаемое системой (~ 12 МБ против ~ 150 МБ)? Во-вторых, основываясь на этом росте, мы можем экстраполировать и предположить, что типизированные массивы и системные объекты продолжали расти и были одной из причин, которые со временем стали причиной чрезмерного использования памяти.

Следовательно, что именно представляют собой типизированные массивы? Как они связаны с потоками? А что такое системные объекты?

process.memoryUsage из третьего сеанса, немного длиннее второго:

{
  "rss": 149794816,
  "heapTotal": 51036160,
  "heapUsed": 12103496,
  "external": 1531733,
  "arrayBuffers": 329913
}
...