求教服务器tcp连接数被占满的问题

yanjing_mail 2011-02-10 09:47:28
服务端tomcat开始后报错,看了一下错误应该是机器TCP连接数被占满的问题,我的程序中有一个while(true) 的循环每3秒执行InetAddress.getByName(macIP).isReachable(timeOut)执行ping两台客户端。另外两台客户端与服务端各有一个socket长连接。服务端有个ibatis的数据库连接池。

服务端程序运行了几天之后,突然出错,InetAddress.getByName(macIP).isReachable(timeOut)执行时IOException异常了。

重启了tomcat也不管用,只好重启了服务器。

我觉得是InetAddress.getByName(macIP).isReachable(timeOut)的问题,但是我测试了几十万次是没有问题的。服务器系统是win2003server。

请教各位,帮忙分析一下。


2011-2-5 9:21:43 org.apache.coyote.http11.Http11BaseProtocol init
严重: Error initializing endpoint
java.net.SocketException: No buffer space available (maximum connections reached?): create
at java.net.ServerSocket.createImpl(ServerSocket.java:255)
at java.net.ServerSocket.getImpl(ServerSocket.java:205)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:141)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket

(DefaultServerSocketFactory.java:50)
at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoint.java:293)
at org.apache.coyote.http11.Http11BaseProtocol.init(Http11BaseProtocol.java:139)
at org.apache.catalina.connector.Connector.initialize(Connector.java:1017)
at org.apache.catalina.core.StandardService.initialize(StandardService.java:578)
at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:782)
at org.apache.catalina.startup.Catalina.load(Catalina.java:504)
at org.apache.catalina.startup.Catalina.load(Catalina.java:524)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:267)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
2011-2-5 9:21:43 org.apache.catalina.startup.Catalina load
严重: Catalina.start
LifecycleException: Protocol handler initialization failed: java.net.SocketException: No buffer space available

(maximum connections reached?): create
at org.apache.catalina.connector.Connector.initialize(Connector.java:1019)
at org.apache.catalina.core.StandardService.initialize(StandardService.java:578)
at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:782)
at org.apache.catalina.startup.Catalina.load(Catalina.java:504)
at org.apache.catalina.startup.Catalina.load(Catalina.java:524)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:267)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
2011-2-5 9:21:43 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1000 ms
2011-2-5 9:21:43 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2011-2-5 9:21:43 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/5.5.26
2011-2-5 9:21:43 org.apache.catalina.core.StandardHost start
信息: XML validation disabled
2011-2-5 9:21:45 org.apache.catalina.startup.HostConfig deployWAR
信息: Deploying web application archive HkcSoft2.war
2011-2-5 9:21:52 org.apache.coyote.http11.Http11BaseProtocol start
严重: Error starting endpoint
java.net.SocketException: No buffer space available (maximum connections reached?): create
at java.net.ServerSocket.createImpl(ServerSocket.java:255)
at java.net.ServerSocket.getImpl(ServerSocket.java:205)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:141)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket

(DefaultServerSocketFactory.java:50)
at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoint.java:293)
at org.apache.tomcat.util.net.PoolTcpEndpoint.startEndpoint(PoolTcpEndpoint.java:313)
at org.apache.coyote.http11.Http11BaseProtocol.start(Http11BaseProtocol.java:151)
at org.apache.coyote.http11.Http11Protocol.start(Http11Protocol.java:76)
at org.apache.catalina.connector.Connector.start(Connector.java:1090)
at org.apache.catalina.core.StandardService.start(StandardService.java:457)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
2011-2-5 9:21:52 org.apache.catalina.startup.Catalina start
严重: Catalina.start:
LifecycleException: service.getName(): "Catalina"; Protocol handler start failed: java.net.SocketException: No

buffer space available (maximum connections reached?): create
at org.apache.catalina.connector.Connector.start(Connector.java:1097)
at org.apache.catalina.core.StandardService.start(StandardService.java:457)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
2011-2-5 9:21:52 org.apache.catalina.startup.Catalina start
信息: Server startup in 8735 ms
2011-2-5 9:21:52 org.apache.catalina.core.StandardServer await
严重: StandardServer.await: create[8005]:
...全文
1201 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
暗夜星辰 2012-01-10
  • 打赏
  • 举报
回复
看看结果
iambic 2011-02-11
  • 打赏
  • 举报
回复
学会使用些诊断工具。最基本的,看下当前有多少个连接,每个连接的坑都被谁占了。
  • 打赏
  • 举报
回复
被占满了 就清理一下啊。

你上面猜测了一种可能,你要试试才知道正确与否啊。大胆尝试。



希望对你有帮助
yanjing_mail 2011-02-10
  • 打赏
  • 举报
回复
另外我觉得应该是InetAddress.getByName(macIP).isReachable(timeOut)的问题,因为过年的时候有2天程序没有处理任何数据,也没有人操作,然后InetAddress.getByName(macIP).isReachable(timeOut)就异常了

但是测试的时候是没有问题的,InetAddress在目标主机的端口 7 (Echo) 上建立 TCP 连接,难道建立后不释放吗?很疑惑

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧