2009-08-04 23 views
8

हाय मुझे बहुत बदसूरत समस्या है: java.net.SocketException: कोई बफर स्पेस उपलब्ध नहीं है (अधिकतम कनेक्शन पहुंचे?) यह क्लाइंट-सर्वर ऐप है। क्लाइंट विंडोज एक्सपी एसपी 2 32 बी है, दो नेट कार्ड कोर जोड़ी के साथ। जावा 1.6। u7। एप्लिकेशन में स्थानीय संचार के लिए कुछ सर्वर सॉकेट खुला है और आरबीआई के लिए jboss सर्वर के लिए क्लाइंट सॉकेट के जोड़े हैं।java.net का शिकार करें। सॉकेटएक्सप्शन: कोई बफर स्पेस उपलब्ध नहीं है

कुछ घंटों/दिनों के बाद! मैं सर्वर पर संचार करने के लिए कोई नया क्लाइंट सॉकेट खोलने में असमर्थ हूं। सर्वर सॉकेट अभी भी काम करता है।

विंडोज नेटस्टैट 130 से 150 कनेक्शन से कुछ दिखाता है। ~ 3500 कनेक्शन के बाद मैन्युअल रूप से प्रयास करने के बाद मैं बफर थक गया!

मैंने कोशिश की:

  • प्रत्येक सॉकेट का उपयोग करें जिसे हम उपयोग करते हैं, हम इसे बंद भी करते हैं।
  • पृष्ठभूमि पर रन netstat कनेक्शन खोला
  • रन वायरस स्कैन 1.6 यू 16 को
  • अद्यतन जावा किसी भी मैलवेयर पाया करने के लिए नजर रखने के लिए
  • अक्षम दूसरे नेटवर्क इंटरफेस

  • एक बार जावा पुनरारंभ मैं खोलने के लिए कर रहा हूँ नया कनेक्शन

    पूरे अपवाद:

     
    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 –

    उत्तर

    1

    हमने समस्या को मारने की कोशिश की (और सफलतापूर्वक)। जावा - फिर हर सॉकेट हम इस्तेमाल किया जाँच, उन्हें कुछ विशेष वर्ग में रजिस्टर अगर जरूरत
    - हर वर्ग के लिए SocketFactory और ServerSocketFactory प्रदान जो खुले सॉकेट ही (उदाहरण के jboss कनेक्टर्स के लिए)
    - खोली गई फ़ाइलों की जाँच, उन्हें अंत में में बंद
    - यूआरएल कनेक्शन भी खुलता है, लेकिन यदि आप इसके बाद स्ट्रीम मांगते हैं, तो धारा स्ट्रीम के साथ कनेक्शन बंद हो जाता है (धन्यवाद स्टीफन)।

    ओएस
    - अलग जावा (1.5, 1.6, 1.7)
    का उपयोग करें - नए ड्राइवरों
    स्थापित - रंग की पृष्ठभूमि पर उपयोग netstat और यातायात की निगरानी (स्क्रिप्ट का उपयोग कर, हाँ विन XP स्क्रिप्ट बहुत अच्छी तरह से कर सकते हैं)। यदि आवश्यक हो तो उन्नत पैकेट स्नीफर्स (तार शार्क?) का उपयोग करें।
    - विन XP समवर्ती कनेक्शन के लिए सीमा होती है उन्हें (गूगल) भी
    जाँच, - (! भी निजी नेटवर्क पर) वायरस और mallware के लिए बार-बार जाँच

    3

    यह निश्चित रूप से लगता है जैसे आप अपने ऐप में किसी भी तरह सॉकेट लीक कर रहे हैं।

    • चेक कि आपके कोड हमेशा सॉकेट खुलता है ... यहां तक ​​कि कुछ अपवाद के घटना में बंद कर देता है; यानी finally ब्लॉक में बंद करें।
    • यदि आपका कोड यूआरएल कनेक्शन का उपयोग करता है, सुनिश्चित करें कि वे डिस्कनेक्ट हो जाएं।
    • मैं एक विशेषज्ञ नहीं हूं, लेकिन क्या आपका कोड अपनी InitialContext ऑब्जेक्ट को बंद कर देना चाहिए?
    +0

    का प्रयास करें - यूआरएल कनेक्शन के साथ अच्छा बिंदु है, मैं उन्हें
    पुनः जाँच करेगा - मैं पहले से ही प्रारंभिक संदर्भ के लिए दस्तावेज़ पढ़ सकते हैं और यह बहुत अप्रासंगिक लग बंद करने। लेकिन मैं इसे आज़मा दूंगा।
    लेकिन फिर भी मैं netstat का उपयोग कर किसी भी कनेक्शन को क्यों देख रहा हूं? – pnemec

    +0

    @pnemec: अपवाद संदेश के आधार पर, यह खोले जा रहे सॉकेट से जुड़े जावा-साइड बफर संसाधन हो सकता है। यह विंडोज नेटस्टैट के साथ दिखाई नहीं दे सकता है। –

    0

    सलाह इस link में की पेशकश को पढ़ने के बाद! मैं यह निर्धारित करने में सक्षम था कि मैं एक समय के बहुत कम समय में अक्सर प्रदर्शित किया गया था() तरीका। इसलिए, मैंने कॉल के बीच 5 मिलीसेकंड प्रतीक्षा की है जिसे प्रदर्शित किया गया है। यह मेरी सॉकेट अपवाद मुद्दा तय किया।

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

    जैसा कि लिंक में बताया गया है कि आपको केवल एक प्रतीक्षा पकड़ना चाहिए यदि यह प्रतीक्षा पर्याप्त नहीं है।

    संबंधित मुद्दे