Revisión de octubre de 2026. El error Too many open files puede surgir cuando un proceso alcanza su límite de descriptores, pero también puede revelar una fuga de recursos en el programa. Aumentar indiscriminadamente el límite no corrige la causa.
Diagnóstico recomendado
En una sesión de shell comprueba el límite blando con ulimit -Sn y el duro con ulimit -Hn. Para un proceso en marcha, revisa /proc/PID/limits sustituyendo PID por el identificador real. Si la aplicación se ejecuta como servicio de systemd, consulta los valores efectivos mediante systemctl show NOMBRE.service -p LimitNOFILE: el archivo /etc/security/limits.conf no determina necesariamente sus límites. Investiga primero por qué crece el número de archivos o sockets abiertos.
Relacionado: monitorización de procesos con Monit.
Si en una aplicación (aMule por ejemplo, o algunas bases de datos como Oracle) se produce este error:
ERROR salvando archivo part: Failed to open part.met file (681.part.met ==> Fotos.tar.gz)
2009-07-16 14:14:05: Error: can't open file '/home/carlos/temporales_amule/489.part.met' (error 24: Too many open files)
2009-07-16 14:14:05: CFile: Error when opening file (/home/carlos/temporales_amule/489.part.met): Too many open files
éste es debido a la apertura simultánea de más descriptores de fichero de los permitidos por el sistema operativo. Se puede ver facilmente con el siguiente comando:
carlos@shirley:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Para ello, o se corrige la aplicación para que no abra tantos ficheros al mismo o se cambia la configuración del sistema operativo para aumentar el límite. En este último caso, en GNU/Linux Kubuntu sería editando el fichero /etc/security/limits.conf
carlos@WhenIGrowUp:~$ sudo nano /etc/security/limits.conf
[sudo] password for carlos:
Añadir al final del fichero las siguientes lineas:
[...]
carlos soft nofile 30000
carlos hard nofile 30000
[...]
Sustituyendo logicamente «carlos» por el nombre del usuario que ejecuta la aplicación. Puede ser necesario reiniciar la sesión de ese usuario. Para comprobar que el cambio se ha aplicado correctamente, ejecutar el comando ulimit de nuevo:
carlos@shirley:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 30000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
