ENOMEM (errno 12)
errno 12
Message officiel (tel qu'affiché à l'écran) : Out of memory
Aussi recherché sous la forme : Cannot allocate memory, errno 12, ENOMEM error
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)
- Vérifiez la mémoire et le swap avec 'free -h' et repérez les plus gros consommateurs avec 'ps aux --sort=-%mem | head'
- Ajoutez ou agrandissez le swap sur les petites instances VPS dont la RAM est très limitée
- 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
- Examinez les paramètres de surallocation avec 'sysctl vm.overcommit_memory' ; le mode strict (2) peut refuser fork() aux gros processus
- 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
- 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)
- 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 :