Tengo un gran problema y es que la aplicación de producción de mi empresa, que desafortunadamente no puedo cerrar y reiniciar (no estoy seguro de cómo y no quiero cometer ningún error), está generando muchas excepciones en demasiados archivos. open al intentar abrir un socket para leer desde un servidor ftp.
2013-01-02 16:19:03,222 ERROR [main] software.background.Program(Program.java:doExecute{225}) - Exception during ftp transfer
someclasses.ftp.FtpException: Could not create connection to xxxx
at someclasses.communication.ftp.FtpImpl.connect(FtpImpl.java:114)
at Program.doExecute(Program.java:176)
at Program.main(Program.java:287)
Caused by: java.net.SocketException: Too many open files
at java.net.Socket.createImpl(Socket.java:397)
at java.net.Socket.<init>(Socket.java:371)
at java.net.Socket.<init>(Socket.java:189)
at someclasses.Ftp.connect(Ftp.java:386)
Entiendo que se alcanzó el límite por aplicación de archivos/sockets abiertos, etc. ¿Hay alguna forma de aumentar este máximo por el momento sin cerrar la aplicación? He ejecutado el comando ulimit
y dice unlimited
. Intenté verificar cuántas conexiones tiene abiertas con el lsof -p PID
comando pero dice "comando no encontrado".
Me alegraría mucho que alguien pudiera ayudarme a encontrar otro efecto similar que tiene lsof (creo que es una máquina de sombrero rojo) y darme consejos sobre cómo solucionar este problema temporal. La solución más agradable para esto sería aumentar los archivos/sockets que la aplicación podría abrir. Esta es simplemente una aplicación Java simple.
¡Gracias de antemano!
EDITAR Otra solución sería si hubiera algún comando donde pudiera buscar cómo se ejecutó este programa desde el principio con todos los indicadores eventuales. Entonces tal vez pueda reiniciarlo con éxito. Esta es una aplicación heredada.
Respuesta1
Todo terminó con un reinicio de la aplicación. Cambié ulimit -n a 2048 y recargué la configuración. Sin embargo, todos los procesos heredaron la configuración anterior y fue necesario reiniciar la aplicación.