嗨,我有一个非常难看的问题: java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?) 它是客户端 - 服务器应用程序。客户端是Windows XP SP2 32b,带有两个网卡核心二重奏。 Java 1.6。 U7。 应用程序有几个服务器套接字打开用于本地通信和几个客户端套接字用于rmi到jboss服务器。
经过几个小时/天!我无法打开任何新的客户端套接字与服务器进行通信。服务器套接字仍然有效。
Windows netstat显示130到150个连接。在~3500连接后手动尝试我耗尽缓冲区时!
我试过了:
全部例外:
cause:javax.naming.CommunicationException: Failed to connect to server IP:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server IP:1099 [Roo t exception is java.net.SocketException: No buffer space available (maximum connections reached?): JVM_Bind]] 2009-08-03 09:13:18,968 DEBUG [Thread-9] - stack trace: 2009-08-03 09:13:18,968 DEBUG [Thread-9] - org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1562) 2009-08-03 09:13:18,968 DEBUG [Thread-9] - org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634) 2009-08-03 09:13:18,968 DEBUG [Thread-9] - org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627) 2009-08-03 09:13:18,968 DEBUG [Thread-9] - javax.naming.InitialContext.lookup(Unknown Source)
- 编辑
我们终于解决了snmp服务器故障的问题。我在下面的评论中写下了我的笔记。谢谢你的帮助。
答案 0 :(得分:3)
肯定听起来你在应用程序中以某种方式泄漏了套接字。
finally
区块。答案 1 :(得分:1)
我们尝试(并成功)杀死了这个问题。
JAVA
- 再次检查我们使用的每个插座,如果需要,请在一些特殊类别中注册
- 为每个打开套接字的类提供SocketFactory和ServerSocketFactory(例如jboss连接器)
- 检查打开的文件,最后关闭它们
- URL也会打开连接,但如果您在此之后请求流,则连接将与流一起关闭(感谢Stephen)
OS
- 使用不同的java(1.5,1.6,1.7)
- 安装新的驱动程序
- 使用netstat并监控后台流量(使用脚本,是的win xp可以很好地完成脚本)。如果需要,请使用高级数据包嗅探器(线鲨?)
- win xp对并发连接有限制,请检查它们(谷歌)
- 一次又一次地检查病毒和商城软件(甚至在私人网络上!)
答案 2 :(得分:0)
阅读本link中提供的建议后!我能够在太短的时间内确定我经常使用isDisplayed()方式。因此,我在调用isDisplayed之间放置了5毫秒的等待时间。这解决了我的Socket Exception问题。
for (final WebElement person: persons){
if (person.isDisplayed()){
dosomething;
sleep 5 milliseconds
}
}
如链接中所述,您应该插入一个try catch,以防万一这个等待时间不够长。