Passer au contenu principal

Problème de manque de mémoire dans une application Node.js basée sur Docker

Problème

  • Lors de l'exécution d'une application node.js basée sur Docker, le serveur rencontre un problème de "manque de mémoire" pendant son fonctionnement.
  • Le moteur v8 de node.js a une limite de mémoire heap par défaut. Il a une limite de capacité de mémoire heap comme suit :
    • Inférieur à v12 : 1,35 Go
    • Inférieur à v14 : 2 Go
    • Supérieur ou égal à v14 : 4 Go
  • Sans connaître cette limite de mémoire, l'application continuait à utiliser de la mémoire jusqu'à ce que le service se bloque.
  • L'instance de ce service avait 12 Go de RAM, et lorsqu'une grande quantité de mémoire était utilisée, 4 Go étaient utilisés et il restait plus de 7 Go d'espace libre.
  • En raison d'une mauvaise compréhension de la structure du service, la mémoire était gaspillée et la disponibilité du service diminuait.

Solution

  • Lors de l'exécution de node, utilisez node --max-old-space-size=8192 start.js avec --max-old-space-size.
  • Dans Docker, ajoutez la variable d'environnement NODE_OPTIONS=--max-old-space-size=8192.
  • En ajoutant ces options, la taille maximale du tas du programme est augmentée, ce qui améliore la disponibilité du service.