java.net.SocketException: Too many open files

引用
Oct 15, 2009 8:10:31 AM org.apache.tomcat.util.net.PoolTcpEndpoint acceptSocket
SEVERE: Endpoint ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8182] ignored exception: java.net.SocketException: Too many open files
java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
at java.net.ServerSocket.implAccept(ServerSocket.java:450)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:368)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:549)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)

大概了解情况,对方是Linux主机,部署了多个应用,早上访问sso应用登录不了,重启后正常。
    怀疑是cache与sso交互时可能文件没有关闭,但是查看代码确认不存在这种情况,所以问题在测试环境进行并发的测试,但是这个时候却报出java.net.BindException: Address already in use, 这是由于短时间内new socket操作过多而socket.close()操作并不能立即释放绑定的端口而是把端口设置为TIME_WAIT状态过段时间(默认240s)才释放(用netstat -an可以看到)最后系统资源耗尽,系统不能访问(假死,一会儿又能访问)。
    到网上查了好多资料,用ulimit查看到生产和测试环境都是1024个文件数量,为啥我的测试环境不报“Too many open files”这个错误呢?暂时在生产环境用ulimit -n 8192设置。不知道以后还会出现类似错误情况。有高手如果遇到类似错误,可以指点一下!

参考了一下资料:
http://www.blogjava.net/tufanshu/archive/2006/07/31/60981.html
http://www.haoguoliang.com/blog/2009/08/too-many-open-files.html
http://blog.chinaunix.net/u2/60332/showart_472398.html
http://blog.chinaunix.net/u2/66903/showart_1409257.html

你可能感兴趣的:(java,apache,tomcat,.net,SSO)