メインコンテンツにスキップ

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のように環境変数を追加します。
  • プログラムの最大ヒープを増やすために、上記のオプションを追加することで、サービスの可用性を向上させることができます。