web-dev-qa-db-ja.com

node.jsでガベージコレクターを実行するように要求するにはどうすればよいですか?

起動時に、node.jsアプリは約200MBのメモリを使用するようです。しばらくそのままにしておくと、約9MBに縮小します。

アプリ内から:

  1. アプリが使用しているメモリ量を確認しますか?
  2. ガベージコレクターに実行を要求しますか?

私が尋ねる理由は、一時的に処理される多くのファイルをディスクからロードすることです。これにより、おそらくメモリ使用量が急増します。しかし、GCが実行されるまで、さらにファイルをロードしたくはありません。そうしないと、メモリが不足するリスクがあります。

助言がありますか ?

52
Kaizer Sozay

_--expose-gc_フラグを使用してノードプロセスを起動した場合、global.gc()を呼び出して、ノードにガベージコレクションを実行させることができます。ノードアプリ内の他のすべての実行は、GCが完了するまで一時停止されるため、あまり頻繁に使用しないでください。パフォーマンスに影響することに注意してください。

コード内からGC呼び出しを行うときにチェックを含めて、フラグなしでノードを実行した場合に問題が発生しないようにすることができます。

_try {
  if (global.gc) {global.gc();}
} catch (e) {
  console.log("`node --expose-gc index.js`");
  process.exit();
}
_
86
IgnisFatuus

ノードを使用すると、ガベージコレクションを手動でトリガーできます。これは、Nodeを_--expose-gc_フラグ(_node --expose-gc index.js_)で実行することで実現できます。
ノードがそのモードで実行されると、プログラムから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();
}
_
6
Piqué