क्या tcp-backlog "पूर्ण कनेक्शन कतार" का आकार है (तीन-तरफ़ा हैंडशेक पूर्ण, जो यहाँ वर्णित है) या "अपूर्ण कनेक्शन कतार"?
tcp-backlog
पूर्ण कनेक्शन कतार . का आकार है . वास्तव में, Redis इस कॉन्फ़िगरेशन को listen(int s, int backlog)
के दूसरे पैरामीटर के रूप में पास करता है कॉल करें।
@GuangshengZuo के पास पहले से ही इस प्रश्न का अच्छा उत्तर था। इसलिए मैं दूसरे पर ध्यान केंद्रित करूंगा।
<ब्लॉकक्वॉट>यदि इसका अर्थ है "पूर्ण कनेक्शन कतार" तो मुझे tcp_max_syn_backlog क्यों बढ़ाना चाहिए जो अपूर्ण कनेक्शन कतार के आकार को सीमित करता है?
आपके द्वारा बताए गए दस्तावेज़ का उद्धरण:
<ब्लॉकक्वॉट>कार्यान्वयन दो कतारों, एक SYN कतार (या अपूर्ण कनेक्शन कतार) और एक स्वीकार कतार (या पूर्ण कनेक्शन कतार) का उपयोग करता है। राज्य SYN RECEIVED में कनेक्शन SYN कतार में जोड़े जाते हैं और बाद में जब उनका राज्य ESTABLISHED में बदल जाता है, यानी जब 3-वे हैंडशेक में ACK पैकेट प्राप्त होता है, तो उन्हें स्वीकार कतार में ले जाया जाता है। जैसा कि नाम से ही स्पष्ट है, एक्सेप्ट कॉल को केवल एक्सेप्ट क्यू से कनेक्शन का उपभोग करने के लिए लागू किया जाता है। इस मामले में, सुनो syscall का बैकलॉग तर्क स्वीकार कतार के आकार को निर्धारित करता है।
हम देख सकते हैं कि आइटम complete connection queue
में हैं incomplete connection queue
से ले जाया जाता है ।
यदि आपके पास एक बड़ा somaxconn
है एक छोटे से tcp_max_syn_backlog
. के साथ , तो हो सकता है कि आपके पास complete connection queue
. में ले जाने के लिए पर्याप्त आइटम न हों , और complete connection queue
कभी भरा नहीं हो सकता। हो सकता है कि कई अनुरोधों को दूसरी कतार में ले जाने का मौका मिलने से पहले ही उन्हें पहली कतार से हटा दिया गया हो।
इसलिए केवल somaxconn
का मान बढ़ाएं काम नहीं कर सकता है। आपको दोनों को ऊपर उठाना है।