JBoss - java.net.SocketException: 打开的文件太多

3

请提供以下错误的正确解决方案,增加ulimit对我来说不是一个解决方案。

环境 - 红帽上的java 7和Jboss 4.3.2.GA

22:30:08,913 ERROR [JIoEndpoint] Socket accept failed
java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:396)
at java.net.ServerSocket.implAccept(ServerSocket.java:522)
at java.net.ServerSocket.accept(ServerSocket.java:490)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:309)
at java.lang.Thread.run(Thread.java:722)

2
这是什么情况导致的? - Thorbjørn Ravn Andersen
初始时,Jboss启动时打开了250个文件,每次请求需要打开大约100到120个文件,并关闭10到20个文件。在我的情况下,我只是登录到我的应用程序,然后退出,这个过程会保持超过100个文件处于打开状态。如果我进行负载测试,当30个用户登录时,我可以看到超过1000个文件处于打开状态。此操作不使用任何I/O操作。 - onlykalu
3个回答

0

看起来有些代码没有关闭套接字。确保在使用完Socket后将其关闭。


更有可能是文件。Web应用程序通常不会自己打开套接字。 - user207421

0

最初错过了“增加ulimit对我来说不是一个解决方案”。但如果它是1024,那真的太低了。 - Vadzim
我已经尝试了这个事情,但即使对于20万个文件,它也在一些操作后失败了。 - onlykalu

-1

在你增加ulimit或启动更多进程之前,你无法对其进行任何操作。我不知道你如何运行多个服务器实例 - 可以查看手册。祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接