Eu tenho um grande problema: o aplicativo de produção da minha empresa, que infelizmente não consigo desligar e reiniciar (não tenho certeza de como e não quero cometer nenhum erro), está gerando muitas exceções em muitos arquivos open ao tentar abrir um soquete para ler de um 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)
Entendo que o limite de arquivos/soquetes abertos por aplicativo e assim por diante foi atingido. Existe alguma forma de aumentar esse máximo por enquanto sem fechar o aplicativo? Eu executei o comando ulimit
e ele afirma unlimited
. Tentei verificar quantas conexões ele abriu com o lsof -p PID
comando, mas aparece "comando não encontrado".
Ficaria muito feliz se alguém pudesse me ajudar a encontrar outro efeito semelhante ao lsof (acho que é uma máquina de chapéu vermelho) e conselhos sobre como consertar isso temporariamente? A solução mais agradável para isso seria aumentar o número de arquivos/soquetes que o aplicativo poderia abrir. Este é apenas um aplicativo Java simples.
Desde já, obrigado!
EDITAR outra solução seria se houvesse algum comando onde eu pudesse ver como esse programa foi executado desde o início com todos os eventuais flags. Então talvez eu pudesse reiniciá-lo com sucesso. Este é um aplicativo legado.
Responder1
Tudo terminou com a reinicialização do aplicativo. Alterei ulimit -n para 2048 e recarreguei a configuração. Porém, todos os processos herdaram a configuração antiga e o aplicativo teve que ser reiniciado.