2009-08-04 53 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以防萬一這個等待時間不夠長。

    相關問題