EMFILE (errno 24)
errno 24
Messaggio ufficiale (come appare sullo schermo): Too many open files
Cercato anche come: Too many open files, errno 24, EMFILE: too many open files
Che cosa significa
EMFILE, «Too many open files» (errno 24), significa che un processo ha raggiunto il limite di file descriptor aperti. Ogni socket, file e pipe conta. Server molto carichi, file watcher e codice con perdite di risorse lo raggiungono; il limite è per processo (ENFILE è l'equivalente a livello di sistema).
Si applica a: Linux, macOS (errno BSD), WSL, Container Docker
Come risolvere EMFILE (errno 24)
- Controlla il limite attuale con 'ulimit -n' e l'uso del processo con 'ls /proc/<pid>/fd | wc -l'
- Individua cosa è aperto con 'lsof -p <pid> | awk "{print \$5}" | sort | uniq -c' per riconoscere una perdita (migliaia di socket o sempre lo stesso file)
- Aumenta il limite della shell per la sessione con 'ulimit -n 65535' (fino al limite hard)
- Per i servizi systemd, imposta 'LimitNOFILE=65535' nella sezione [Service] dell'unità, poi esegui 'systemctl daemon-reload' e riavvia
- Per le sessioni di login, imposta i limiti nofile in /etc/security/limits.conf
- Correggi le perdite nel codice: chiudi file e socket in blocchi finally/with e riutilizza le connessioni HTTP con un pool
- Su macOS, controlla 'launchctl limit maxfiles' e aumenta 'ulimit -n' nella shell
Perché succede
Ogni processo ha un limite soft RLIMIT_NOFILE, spesso 1024 per impostazione predefinita. Alta concorrenza, file watcher su alberi di directory grandi e perdite di descriptor spingono i processi oltre il limite.
Domande frequenti
Qual è la differenza tra EMFILE ed ENFILE?
EMFILE è il limite per processo; ENFILE indica che la tabella dei file dell'intero sistema è piena.
Perché aumentare ulimit non aiuta il mio servizio?
I servizi avviati da systemd ignorano l'ulimit della tua shell. Imposta LimitNOFILE nel file di unità.
Errori correlati
Fonte: Linux kernel errno.h · soluzioni scritte e verificate dalla redazione (vedi la nostra politica editoriale)
Ultimo aggiornamento: