2011-01-27 10 views
10

में लंबित कनेक्शन कतार स्वीकार करने के आकार को जानें, एक विशिष्ट सी नेटवर्क सर्वर कार्यान्वयन में, स्वीकृत लंबित कतार का आकार listen के साथ सेट किया जा सकता है। जब कोई नया कनेक्शन आयता है और कतार में कोई और स्थान नहीं होता है, तो ECONNREFUSED क्लाइंट को भेजता है या अनुरोध को अनदेखा किया जाता है।जीएनयू/लिनक्स

इस कतार की स्थिति जानने का कोई तरीका है? यह महत्वपूर्ण है क्योंकि उच्च लोड इवेंट-आधारित डिमन में, हम क्लाइंट से कुछ रिट्रीज़ का पता लगा रहे हैं, और हमें संदेह है कि यह कतार पूर्ण हो गई है और कनेक्शन की कोशिशों को अनदेखा किया जा रहा है।

अग्रिम धन्यवाद।

+0

ग्राहक एक ECONNREFUSED त्रुटि प्राप्त करता है net.inet.ip.maxqueue:

इन OpenBSD पर प्रासंगिक sysctls .. कि मैं अब एक त्वरित sysctl -एक का पता चलता है बैठा हूँ कर रहे हैं? यदि हां, तो आपका जवाब है। AFAIK लंबित कतार के आकार को जानने का कोई तरीका नहीं है। – Simone

+0

बिल्कुल नहीं। हैंडशेक सही ढंग से समाप्त नहीं हुआ है और सर्वर हैंडशेक के अंतिम एसीके की तरह सिनाक भेजकर रीट्रीज़ में जाता है। हमने इस व्यवहार को पुन: उत्पन्न किया है जब स्वीकृत लंबित कतार सुनने के साथ सेट सीमा से बाहर हो जाती है, इसलिए यह कतार हमारे संदिग्ध है। –

+0

क्या आप वाकई हर आने वाले कनेक्शन को स्वीकार करते हैं? – Simone

उत्तर

8
लिनक्स में

: /proc/sys/नेट/IPv4/tcp_max_syn_backlog:

याद कनेक्शन अनुरोध, जो अभी भी कर रहे हैं ग्राहक कनेक्ट होने से एक रसीद प्राप्त नहीं किया था की अधिकतम संख्या।

डिफ़ॉल्ट मान 128 एमबी से अधिक स्मृति वाले सिस्टम के लिए 1024 है, और कम स्मृति मशीनों के लिए 128 है। अगर सर्वर अधिभार से पीड़ित है, तो इस नंबर को बढ़ाने का प्रयास करें।

/proc/sys/net/core/somaxconn: सॉकेट सुनो() बैकलॉग की सीमा, जो उपयोगकर्ता स्पेस में सोमैक्सकॉन के रूप में जाना जाता है। 128 पर डिफ़ॉल्ट। टीसीपी सॉकेट के लिए अतिरिक्त ट्यूनिंग के लिए tcp_max_syn_backlog भी देखें। = 300