Tudo terminou com o reinício da aplicação. Eu mudei o ulimit -n para 2048 e recarreguei a configuração. No entanto, todos os processos herdados da configuração antiga e do aplicativo precisavam ser reiniciados.
Eu tenho um grande problema e é que o aplicativo de produção da minha empresa que infelizmente não consigo desligar e reiniciar (não sei como, e não quero cometer nenhum erro) está emitindo muitas exceções muitos arquivos abertos 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)
Eu entendo que o limite por aplicativo de arquivos / soquetes abertos e assim por diante é alcançado. Existe alguma maneira de aumentar este máximo por enquanto sem fechar o aplicativo? Eu executei o comando ulimit
e declara unlimited
. Eu tentei verificar quantas conexões ele abriu com o comando lsof -p PID
, mas ele diz "comando não encontrado".
Ficaria muito feliz se alguém pudesse me ajudar a encontrar outro efeito semelhante ao da 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 os arquivos / soquetes que o aplicativo poderia abrir. Este é apenas um aplicativo java simples.
Obrigado antecipadamente!
EDITAR outra solução seria se houvesse algum comando em que eu pudesse pesquisar como esse programa foi executado desde o início com todas as bandeiras eventuais. Então eu talvez pudesse reiniciá-lo com sucesso. Este é um aplicativo legado.