Java lanza la excepción java.net.SocketException: Too many open files cuando el sistema detecta que el proceso java supera el número de descriptores de ficheros (fd) abiertos. Este número máximo se puede definir a nivel de sistema o de shell.
Nivel de sistema
Para conocer el número máximo de fd en el sistema teclee en consola:
$> cat /proc/sys/fs/file-maxEn mi caso devolvió el valor de 65536, según he leido este número puede incrementarse hasta el valor de 200000. Si se necesita cambiar este valor añadir en el fichero /etc/sysctl.conf.
fs.file-max = 200000Nivel de Shell
Para conocer el número máximo de fd en shell teclee en consola:
ulimit -nEl valor devuelto fue 1024, valor razonable pero también se puede cambiar. Para ello se tiene que añadir
* soft nofile 2048
* hard nofile 2048En el fichero /etc/security/limits.conf.
Nota:
Para averiguar el número de descriptores abiertos por un proceso (xxx) escribir en consola:
lsof -p xxx |wc -l