套接字上打开的文件过多

套接字上打开的文件过多

我有一个大问题,那就是我公司的生产应用程序不幸无法关闭并重新启动(我不确定如何关闭,而且我不想犯任何错误),当尝试打开套接字从 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)

我了解每个应用程序打开的文件/套接字等的限制已达到。有没有办法在不关闭应用程序的情况下暂时增加此最大值?我运行了该命令ulimit,它显示unlimited。我尝试检查使用该命令打开了多少个连接,lsof -p PID但它显示“未找到命令”。

如果有人能帮我找到 lsof 的另一个类似效果(我认为是一台红帽机器)并建议如何暂时修复此问题,我将非常高兴。对此最令人满意的解决方案是增加应用程序可以打开的文件/套接字。这只是一个普通的 Java 应用程序。

提前致谢!

编辑 另一个解决方案是,如果有任何命令,我可以从一开始就查找该程序是如何运行的,以及所有最终标志。然后我可能可以成功重新启动它。这是一个遗留应用程序。

答案1

最终,应用程序重新启动。我将 ulimit -n 更改为 2048,并重新加载配置。但是,所有进程都继承了旧配置,应用程序必须重新启动。

相关内容