Saltar al contenido principal

Problema de falta de memoria en una aplicación Node.js basada en Docker

Problema

  • Cuando se ejecuta una aplicación Node.js basada en Docker, se produce un problema de 'out of memory' mientras el servidor está en funcionamiento.
  • El motor v8 de Node.js tiene un límite predeterminado en la memoria heap. Tiene una capacidad de límite de memoria heap como se muestra a continuación:
    • Menos de v12: 1,35 GB
    • Menos de v14: 2 GB
    • v14 o superior: 4 GB
  • Sin saber sobre esta limitación de memoria, la aplicación continuó utilizando memoria y el servicio se detuvo.
  • La instancia de este servicio tenía 12 GB de RAM y cuando se utilizaba mucha memoria, se utilizaban 4 GB, dejando un espacio libre de más de 7 GB.
  • No se comprendía correctamente la estructura del servicio, lo que llevó a un desperdicio de memoria y una disminución en la disponibilidad del servicio.

Solución

  • Al ejecutar Node, use node --max-old-space-size=8192 start.js para establecer --max-old-space-size
  • En Docker, agregue la variable de entorno NODE_OPTIONS=--max-old-space-size=8192
  • Al agregar estas opciones, se aumenta el límite máximo de heap del programa y se mejora la disponibilidad del servicio.