ENOMEM (errno 12)
errno 12
Messaggio ufficiale (come appare sullo schermo): Out of memory
Cercato anche come: Cannot allocate memory, errno 12, ENOMEM error
Che cosa significa
ENOMEM, «Cannot allocate memory» (errno 12), significa che il kernel non è riuscito a fornire la memoria richiesta. Compare da fork(), mmap() e da programmi come Node.js e Docker quando RAM, swap, limiti di memoria o regole di overcommit sono esauriti.
Si applica a: Linux, macOS (errno BSD), WSL, Container Docker
Come risolvere ENOMEM (errno 12)
- Controlla memoria e swap con 'free -h' e individua i maggiori consumatori con 'ps aux --sort=-%mem | head'
- Aggiungi o amplia lo swap sulle piccole istanze VPS in cui la RAM è molto limitata
- Controlla i limiti di container o cgroup (Docker '--memory', Kubernetes resources.limits) e aumentali se il carico di lavoro è legittimo
- Rivedi le impostazioni di overcommit con 'sysctl vm.overcommit_memory'; la modalità strict (2) può rifiutare fork() da processi di grandi dimensioni
- Per gli errori di heap in Node.js, cerca prima le perdite di memoria, poi valuta '--max-old-space-size' entro la RAM disponibile
- Controlla se ci sono troppe mappe di memoria con 'sysctl vm.max_map_count' (Elasticsearch e alcuni database richiedono valori più alti)
- Controlla 'dmesg -T | grep -i -E "out of memory|oom"' per vedere se è coinvolto anche l'OOM killer
Perché succede
Le allocazioni falliscono quando memoria fisica e swap sono esaurite, quando la politica di overcommit rifiuta una richiesta, quando si raggiunge il limite di un cgroup oppure quando si superano i limiti di spazio degli indirizzi o di numero di mappe.
Domande frequenti
Perché fork fallisce con «Cannot allocate memory» anche se la memoria sembra libera?
I processi di grandi dimensioni che eseguono fork possono superare i limiti di commit con overcommit strict, oppure il limite del cgroup è inferiore alla memoria di sistema.
Errori correlati
Fonte: Linux kernel errno.h · soluzioni scritte e verificate dalla redazione (vedi la nostra politica editoriale)
Ultimo aggiornamento: