如何处理java.net.SocketException:打开的文件太多

时间:2012-05-15 05:50:56

标签: java-ee struts2 socketexception

我们是一个Struts2 java webapplication,使用hibernate 3.5 ORM。当我们在应用程序上执行一些并行操作时,我们得到以下异常,并且java进程cpu利用率达到最大值。

May 15, 2012 12:39:59 AM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
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:59)
    at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:210)
    at java.lang.Thread.run(Thread.java:662)

请相应地建议我们。

2 个答案:

答案 0 :(得分:6)

我猜你是在基于Linux的操作系统上?似乎你需要增加最大数量。每个进程的文件句柄。

看看这里:http://ehaselwanter.com/en/blog/2009/03/13/tomcat-too-many-open-files/

答案 1 :(得分:1)

它超过了打开文件描述限制的数量。解决方案:增加打开文件数量的硬限制和软限制。

soft nofile 999999 hard nofile 999999 在/etc/security/limits.conf文件中