Как запросить сборщик мусора в node.js для запуска?

При запуске, похоже, мое приложение node.js использует около 200 МБ памяти. Если я оставлю это в покое некоторое время, оно сократится примерно до 9 МБ.

Возможно ли из приложения:

  • Проверьте, сколько памяти использует приложение?
  • Запрос на сборщик мусора для запуска?

Я задаю вопрос: загружаю несколько файлов с диска, которые обрабатываются временно. Это, вероятно, приводит к увеличению памяти. Но я не хочу загружать больше файлов до тех пор, пока GC не запустится, в противном случае существует риск того, что у меня закончится память.

Любые предложения?

Ответ 1

Если вы запускаете процесс узла с --expose-gc, вы можете затем вызвать global.gc() чтобы заставить узел запустить сборку мусора. Помните, что все остальные операции в вашем приложении узла будут приостановлены до завершения GC, поэтому не используйте его слишком часто, иначе это повлияет на производительность.

Возможно, вы захотите включить проверку при выполнении вызовов GC из вашего кода, чтобы все не пошло плохо, если узел был запущен без флага:

try {
  if (global.gc) {global.gc();}
} catch (e) {
  console.log("'node --expose-gc index.js'");
  process.exit();
}

Ответ 2

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

бывший -

// Force garbage collection every time this function is called
try {
  if (global.gc) {global.gc();}
} catch (e) {
  console.log("'node --expose-gc index.js'");
  process.exit();
}

Ответ 3

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

EDIT: см. сообщение выше.