क्या net.core.somaxconn बढ़ने से फर्क पड़ेगा?


27

मुझे net.core.somaxconn पैरामीटर पर एक तर्क मिला: मुझे बताया गया था कि यदि हम डिफ़ॉल्ट 128 को बदलते हैं तो इससे कोई फर्क नहीं पड़ेगा।

मेरा मानना ​​है कि यह पर्याप्त प्रमाण हो सकता है:

"यदि बैकलॉग का तर्क / proc / sys / net / core / somaxconn में मान से अधिक है, तो इसे चुपचाप उस मान से छोटा कर दिया जाता है" http://linux.die.net/man/2/listen

लेकिन ऐसा नहीं है।

क्या किसी को Gbit नेटवर्क पर बैठे दो मशीनों के साथ इस बात की गवाही देने का कोई तरीका पता है? सबसे अच्छा होगा MySQL, LVS, apache2 (2.2), मेमेकैक्ड।

जवाबों:


43

net.core.somaxconnउच्च मूल्यों पर सेट करना केवल हाईलोड किए गए सर्वरों पर आवश्यक है जहां नया कनेक्शन दर इतना अधिक / फट गया है कि बीएसडी में 128 (50% अधिक: 128 backlog+ 64 half-open) होने के बावजूद अभी तक स्वीकृत कनेक्शन को सामान्य नहीं माना जाता है। या जब आपको किसी एप्लिकेशन के लिए "सामान्य" की परिभाषा सौंपनी होगी।

कुछ प्रशासक net.core.somaxconnअपनी सेवाओं के साथ समस्याओं को छिपाने के लिए उच्च का उपयोग करते हैं, इसलिए उपयोगकर्ता की दृष्टिकोण प्रक्रिया से यह कनेक्शन बाधित / टाइमआउट ( net.ipv4.tcp_abort_on_overflowलिनक्स द्वारा नियंत्रित ) के बजाय एक विलंबता स्पाइक की तरह दिखाई देगा ।

listen(2)मैनुअल कहता है - net.core.somaxconnएक आवेदन के लिए केवल ऊपरी सीमा कार्य करता है जो कुछ छोटा चुनने के लिए स्वतंत्र है (आमतौर पर ऐप के कॉन्फ़िगरेशन में सेट होता है)। हालांकि कुछ एप्स का उपयोग केवल listen(fd, -1)सिस्टम द्वारा अनुमत अधिकतम मान के लिए बैकलॉग सेट करने के लिए किया जाता है।

वास्तविक कारण या तो कम प्रसंस्करण दर है (उदाहरण के लिए एकल थ्रेडेड ब्लॉकिंग सर्वर) या कार्यकर्ता थ्रेड्स / प्रक्रियाओं की अपर्याप्त संख्या (जैसे बहु प्रक्रिया / थ्रेडेड ब्लॉकिंग सॉफ्टवेयर जैसे apache/ tomcat)

पुनश्च। कभी-कभी यह तेजी से विफल होने के लिए बेहतर होता है और उपयोगकर्ता को इंतजार करने के बजाय लोड-बैलेंसर को काम करने (रिट्रीट) करने देता है - इस उद्देश्य के लिए हम net.core.somaxconnकिसी भी मूल्य को सेट करते हैं , और एप्लिकेशन बैकलॉग को उदा 10और सीमा net.ipv4.tcp_abort_on_overflowको 1 पर सेट करते हैं।

पी पी एस। लिनक्स कर्नेल के पुराने संस्करणों में somaxconयह 16 निचले बिट्स (यानी कास्टिंग मूल्य uint16_t) के लिए मूल्य को कम करने का बुरा बग है , इसलिए उस मूल्य को अधिक से अधिक करना 65535भी खतरनाक हो सकता है। अधिक जानकारी के लिए देखें: http://patchwork.ozlabs.org/patch/255460/

यदि आप लिनक्स के सभी बैकलॉग इंटर्नल के बारे में अधिक जानकारी में जाना चाहते हैं, तो बेझिझक पढ़ें: लिनक्स में टीसीपी बैकलॉग कैसे काम करता है


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.