ENOMEM (errno 12)

errno 12

LINUX

Message officiel (tel qu'affiché à l'écran) : Out of memory

Aussi recherché sous la forme : Cannot allocate memory, errno 12, ENOMEM error

Terminal Linux exécutant strace, avec l'appel système en échec et l'errno mis en évidence
errno Linux : tracez l'appel système exact qui échoue avant de modifier quoi que ce soit.

Ce que cela signifie

ENOMEM, « Cannot allocate memory » (errno 12), signifie que le noyau n’a pas pu fournir la mémoire demandée. L’erreur provient de fork(), mmap() et de programmes comme Node.js et Docker lorsque la RAM, le swap, les limites de mémoire ou les règles de surallocation sont épuisés.

S'applique à : Linux, macOS (errno BSD), WSL, Conteneurs Docker

Comment corriger ENOMEM (errno 12)

  1. Vérifiez la mémoire et le swap avec 'free -h' et repérez les plus gros consommateurs avec 'ps aux --sort=-%mem | head'
  2. Ajoutez ou agrandissez le swap sur les petites instances VPS dont la RAM est très limitée
  3. Vérifiez les limites de conteneur ou de cgroup (Docker '--memory', Kubernetes resources.limits) et augmentez-les si la charge de travail est légitime
  4. Examinez les paramètres de surallocation avec 'sysctl vm.overcommit_memory' ; le mode strict (2) peut refuser fork() aux gros processus
  5. Pour les erreurs de tas Node.js, recherchez d’abord une fuite de mémoire, puis envisagez '--max-old-space-size' dans la limite de la RAM disponible
  6. Vérifiez le nombre de projections mémoire avec 'sysctl vm.max_map_count' (Elasticsearch et certaines bases de données exigent des valeurs plus élevées)
  7. Consultez 'dmesg -T | grep -i -E "out of memory|oom"' pour voir si l’OOM killer est lui aussi intervenu

Pourquoi cela se produit

Les allocations échouent lorsque la mémoire physique et le swap sont épuisés, lorsque la politique de surallocation refuse une demande, lorsqu’une limite de cgroup est atteinte, ou lorsque les limites d’espace d’adressage ou de nombre de projections sont dépassées.

FAQ

Pourquoi fork échoue-t-il avec « Cannot allocate memory » alors que la mémoire semble libre ?

De gros processus qui se dupliquent peuvent dépasser les limites d’engagement en surallocation stricte, ou la limite du cgroup est inférieure à la mémoire du système.

Erreurs liées

Source : Linux kernel errno.h · solutions rédigées et vérifiées par les éditeurs (voir notre politique éditoriale)

Dernière mise à jour :