
error «Too many open files»
17/07/2009Si 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
It’s always a pleasure to hear from someone with expertise.