跳至正文

在基於Docker的Node.js應用程序中出現內存不足的問題

問題

  • 在運行基於Docker的Node.js應用程序時,服務器在運行過程中出現了“內存不足”的問題。
  • Node.js的V8引擎默認情況下有一個堆內存的限制。 以下是堆內存限制的容量:
    • v12以下:1.35GB
    • v14以下:2GB
    • v14以上:4GB
  • 由於不知道這些內存限制,應用程序持續使用內存,導致服務停止運行。
  • 該服務的實例具有12GB的RAM,當內存使用較多時,會使用4GB,剩餘空間超過7GB。
  • 由於對服務的結構認識不足,導致內存浪費,服務的可用性降低。

解決方法

  • 在運行Node時,使用node --max-old-space-size=8192 start.js這樣的--max-old-space-size選項
  • 在Docker中,使用NODE_OPTIONS=--max-old-space-size=8192這樣的環境變量。
  • 通過添加上述選項,可以增加程序的最大堆,從而提高服務的可用性。