寻找java.net.SocketException:没有可用的缓冲区空间

pne*_*mec 8 java sockets networking windows-xp winsockets

嗨我有一个非常难看的问题:java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?)它是客户端 - 服务器应用程序.客户端是Windows XP SP2 32b,带有两个网卡核心二重奏.Java 1.6.U7.应用程序有几个服务器套接字打开用于本地通信和几个客户端套接字用于rmi到jboss服务器.

几个小时/天后!我无法打开任何新的客户端套接字与服务器进行通信.服务器套接字仍然有效.

Windows netstat显示130到150的连接.〜3500连接后手动尝试我耗尽缓冲区!

我试过了:

  • 检查我们使用的每个套接字,我们也关闭它.
  • 在后台运行netstat以监视打开的连接
  • 运行病毒扫描以发现任何恶意软件
  • 将java更新为1.6 u16
  • 禁用第二个网络接口

  • 重新启动java后,我可以打开新连接.

    整个例外:

    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)
    

    --edited
    我们终于解决了snmp服务器故障的问题.我在评论中写下了我的笔记.感谢帮助.

    pne*_*mec 1

    我们尝试(并成功)解决了这个问题。JAVA - 再次检查我们使用的每个套接字,如果需要,将它们注册在一些特殊的类中
    - 为每个打开套接字本身的类提供 SocketFactory 和 ServerSocketFactory (例如 jboss 连接器)
    - 检查打开的文件,最后关闭它们
    - URL 也打开连接,但如果您在那之后请求流,连接将与流一起关闭(感谢斯蒂芬)。

    操作系统
    - 使用不同的java(1.5、1.6、1.7)
    - 安装新驱动程序
    - 使用netstat并监控后台流量(使用脚本,是的win xp可以很好地执行脚本)。如果需要,请使用高级数据包嗅探器(wire shark?)。
    - win xp对并发连接有限制,也检查它们(谷歌)
    - 一次又一次检查病毒和恶意软件(即使在专用网络上!)