web-dev-qa-db-ja.com

NodeJSが推奨するmax-old-space-size

パラメーターmax-old-space-sizeに基づいてNodeJSがどのように動作するかを理解するのに苦労しています。

たとえば、私の場合、2つのt2.small awsインスタンス(2GBのRAM)を実行しています。

理由はわかりませんが、max-old-space-size = 4096(4GB)に設定しました。この場合、ノードは何をしますか?この構成は、可能なメモリ割り当てエラーにつながる可能性がありますか?

サーバーリソースに基づいてmax-old-space-sizeの正しい値を決定するにはどうすればよいですか?

PD:私のアプリケーションは常にメモリ使用量を増やしており、ノード内部に関するすべてを理解しようとしています。

33
Borjante

「古いスペース」は、V8のマネージ(別名ガベージコレクション)ヒープ(つまりJavaScriptオブジェクトが存在する場所)の最大かつ最も構成可能なセクションであり、--max-old-space-sizeフラグがその最大サイズを制御します。メモリ消費が制限に近づくと、V8は未使用のメモリを解放するためにガベージコレクションにより多くの時間を費やします。

ヒープメモリの消費量(GCが解放できないライブオブジェクト)が制限を超えた場合、V8はプロセスをクラッシュさせる(代替手段がないため)ため、あまり低く設定したくない。もちろん、あまりにも高く設定すると、V8が許可する追加のヒープ使用量により、システム全体がメモリ不足になる可能性があります(代替手段がないため、ランダムプロセスをスワップまたは強制終了します)。

要約すると、2GBのメモリを搭載したマシンでは、おそらく--max-old-space-sizeを約1.5GBに設定して、他の用途のためにメモリを残し、スワッピングを回避します。

56
jmrk