Mi Java está fallando conDemasiados errores archivos abiertos pero lsof muestra un número legal de archivos abiertos
Caused by: java.io.IOException: Too many open files
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)...
Aquí están las líneas principales de /etc/security/limits.conf
. Se pusieron los archivos máximo para un usuario en 500k:
root soft nofile 500000
root hard nofile 500000
* soft nofile 500000
* hard nofile 500000
me encontré lsof
a contar el número de archivos abiertos - tanto a nivel mundial y por el proceso de JVM. Examiné los contadores en /proc/sys/fs
. Todo parece estar bien. Mi proceso solo tiene 4301 archivos abiertos y el límite es 500k:
:~# lsof | wc -l
5526
:~# lsof -uusername | wc -l
4301
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-nr
4736 0 744363
Este es un servidor Ubuntu 11.04. Incluso he reiniciado, así que estoy seguro de que estos parámetros se están utilizando.
No sé si es relevante, pero el proceso se inicia mediante una secuencia de comandos advenedizo, que se inicia el proceso usando setuidgid, así:
exec setuidgid username java $JAVA_OPTS -jar myprogram.jar
lo que me falta?
Intente actualizar su espacio de montón y dándole un mayor tamaño máximo. No estoy seguro de por qué los dos estarían relacionados, pero acerté ese error por una miríada de problemas diferentes. – Relic
Interesante, gracias. Pero ya es -Xmx5800m :) – hughw
en algún lugar del árbol de procesos ¿estás estableciendo nuevos límites usando ulimit? – Jayan