ENOMEM (errno 12)

errno 12

LINUX

Messaggio ufficiale (come appare sullo schermo): Out of memory

Cercato anche come: Cannot allocate memory, errno 12, ENOMEM error

Terminale Linux che esegue strace con la chiamata di sistema non riuscita e l'errno evidenziati
errno di Linux: individua la chiamata di sistema che fallisce prima di modificare qualsiasi cosa.

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)

  1. Controlla memoria e swap con 'free -h' e individua i maggiori consumatori con 'ps aux --sort=-%mem | head'
  2. Aggiungi o amplia lo swap sulle piccole istanze VPS in cui la RAM è molto limitata
  3. Controlla i limiti di container o cgroup (Docker '--memory', Kubernetes resources.limits) e aumentali se il carico di lavoro è legittimo
  4. Rivedi le impostazioni di overcommit con 'sysctl vm.overcommit_memory'; la modalità strict (2) può rifiutare fork() da processi di grandi dimensioni
  5. Per gli errori di heap in Node.js, cerca prima le perdite di memoria, poi valuta '--max-old-space-size' entro la RAM disponibile
  6. Controlla se ci sono troppe mappe di memoria con 'sysctl vm.max_map_count' (Elasticsearch e alcuni database richiedono valori più alti)
  7. 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: