6

在日志消息中的某个位置启动 jboss-portal-2.7.2 时:

2013-01-30 20:32:02,541 ERROR [org.apache.tomcat.util.net.JIoEndpoint] Socket accept failed
java.net.SocketException: Too many open files
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
        at java.net.ServerSocket.implAccept(ServerSocket.java:462)
        at java.net.ServerSocket.accept(ServerSocket.java:430)
        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:662)

在 deploy 文件夹中一共有 20 个。war 模块。有什么解决办法吗?

4

2 回答 2

5

为运行 tomcat 的用户增加服务器上的 ulimit。

检查 ulimit:

ulimit -n

为当前会话增加:

ulimit -n 102400

您可以通过编辑进行永久更改/etc/security/limits.conf

于 2013-06-26T02:12:30.990 回答
3

此消息基本上意味着您已达到操作系统设置的可以打开的最大文件数限制。

解决这个问题的正确方法是诊断输出lsof -p <jboss_java_pid> 并找出导致这些文件打开的原因。然后进行相应的解决方案。

快速修复解决方案可能是增加操作系统的全局最大文件限制或增加用户的文件限制或两者兼而有之。例如,在 Fedora 中,这可以在/proc/sys/file-max文件中设置为全局文件最大限制和/etc/security/limits.conf用户限制。

于 2013-01-30T16:27:08.370 回答