2009-08-04 19 views
8

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

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

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服务器的问题。我在下面的评论中写下笔记。感谢帮助。

    +0

    尝试http://support.microsoft.com/kb/2577795 – 2012-08-19 11:39:09

    回答

    1

    我们试过(并成功)杀死了这个问题。 JAVA - 再次检查,我们使用的每一个插座,如果需要的话在一些特殊类注册它们
    - 提供的SocketFactory和ServerSocketFactory为每类开放式插座本身(例如JBoss的连接器)
    - 检查打开的文件,在最后关闭它们
    - URL也会打开连接,但如果在此之后请求流,连接将与流一起关闭(谢谢Stephen)。

    OS
    - 使用不同的Java(1.5,1.6,1.7)
    - 安装新的驱动
    - 背景上用netstat和监控流量(使用脚本,是Win XP的可以做脚本很漂亮)。如果需要,使用高级数据包嗅探器(Wire Shark?)。
    - Win XP的对并发连接的限制,也
    检查他们(谷歌) - (!甚至在专用网络)检查一次又一次的病毒和mallware

    3

    它肯定听起来像你在你的应用程序以某种方式泄漏套接字。

    • 检查你的代码总是关闭 它打开......即使在 事件的一些异常的套接字;即在finally区块中关闭 。
    • 如果您的代码使用URL连接, 确保它们断开连接。
    • 我不是专家,但是你的代码应该关闭它的InitialContext对象吗?
    +0

    - 好点的URL连接,我会重新检查他们
    - 我已经看过了初始上下文doc和关闭它看起来很漂亮无关。但我会试一试。
    但仍然为什么我没有看到使用netstat的任何连接? – pnemec 2009-08-04 13:36:43

    0

    阅读本link所提供的意见后!我可以在很短的时间内确定我正在使用isDisplayed()方法。因此,我在调用isDisplayed之间放置了5毫秒的等待时间。这解决了我的套接字异常问题。

    for (final WebElement person: persons){ 
         if (person.isDisplayed()){ 
          dosomething; 
          sleep 5 milliseconds 
         } 
        } 
    

    正如链接所述,你应该插入一个try catch以防万一这个等待时间不够长。

    相关问题