追捕java.net.SocketException异常:无缓冲空间(Hunt down java.

2019-06-27 18:47发布

您好我有很丑陋的问题:java.net.SocketException异常:无缓冲的可用空间(最大连接数达到?)它是客户端 - 服务器应用程序。 客户端是Windows XP SP2 32B,有两个网显卡的Core Duo。 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服务器的问题。 我写我的笔记在下面评论。 感谢帮助。

    Answer 1:

    这当然听起来像你在你的应用程序以某种方式泄漏套接字。

    • 检查你的代码总是关闭它打开......甚至在一些例外的情况下接; 即做一个密切finally块。
    • 如果您的代码使用URL连接,确保它们断开连接。
    • 我不是专家,而是应该代码关闭其InitialContext对象?


    Answer 2:

    我们试图(和成功的)杀的问题。 JAVA - 再次检查,我们使用的每一个插座,如果需要的话在一些特殊的类进行注册
    - 对于每个类提供的SocketFactory和ServerSocketFactory其开放插座本身(例如JBoss的连接器)
    - 检查打开的文件,在关闭它们终于
    - URL打开连接太多,但如果你以后问流,连接与数据流(感谢斯蒂芬)一起关闭。

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



    Answer 3:

    阅读此所提供的意见后链接 ! 我能够)来确定,我用isDisplayed(太经常在太短的时间。 因此,我把一个5毫秒的调用isDisplayed之间的等待时间。 这个固定我的Socket异常问题。

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

    正如链接说明你应该插入一个尝试捕捉以防万一此等待不够长。



    文章来源: Hunt down java.net.SocketException: No buffer space available