DockerベースのNode.jsアプリでメモリ不足の問題が発生しました
- dockerベースのnode.jsアプリを実行していると、サーバーが稼働中に
out of memory
の問題が発生しました。
- node.js の v8 エンジンの場合、デフォルト値としてヒープメモリの制限が決まっています。 以下は、ヒープメモリの制限容量です。
- v12 未満: 1.35GB
- v14 未満:2GB
- v14 以上:4GB
- このようなメモリ制限を知らずに、アプリがメモリを継続して使用してサービスが終了してしまいました。
- 該当のサービスのインスタンスは12GBのRAMを持ち、メモリが多く使用されるときに4GBが使用されて余裕のあるスペースが7GB以上残っていました。
- サービスの構造を正しく認識できず、メモリが浪費され、サービスの可用性が低下している状況でした。
解決策
- ノードを実行するときに、プログラムの最大ヒープを増やすために
--max-old-space-size=8192 start.js
を追加します。
- dockerは
NODE_OPTIONS=--max-old-space-size=8192
のように環境変数を追加します。
- プログラムの最大ヒープを増やすために、上記のオプションを追加することで、サービスの可用性を向上させることができます。