अपाचे में समवर्ती कनेक्शन कैसे बढ़ाएं

आज मैं आपसे दुनिया में सबसे अधिक उपयोग की जाने वाली वेब सेवाओं में से एक के बारे में बात करने के लिए आया हूं: वेब सर्वर Apache2.

यह एक ऐसा विषय है जिसके बारे में कई बार बात की गई है, लेकिन अब मैं आपको इस सेवा को ध्यान में रखने के लिए एक और विशेषता के बारे में बताता हूं: एक साथ कनेक्शन की सीमा। इससे कोई फर्क नहीं पड़ता कि हमारे पास बहुत बुनियादी या एक i7 प्रोसेसर और 32 जीबी रैम वाला स्पेसशिप है ...

जब तक हम उचित उपाय नहीं करेंगे, तब तक एक साथ कनेक्शन की सीमा हमेशा समान रहेगी, जिसका अर्थ है कि यदि हम एक ही समय में कई लोगों को कनेक्ट करना चाहते हैं, तो हमें न केवल अच्छे हार्डवेयर की आवश्यकता होगी, बल्कि एक अच्छे कॉन्फ़िगरेशन की भी आवश्यकता होगी।

इस मामले में, कुछ भी स्थापित करना आवश्यक नहीं है, सब कुछ सरल अवधारणाओं पर आधारित है जिसे अपाचे को कॉन्फ़िगर करने के लिए ध्यान में रखा जाना चाहिए; ऐसी अवधारणाएँ जो किसी भी परिवर्तन करने से पहले बहुत स्पष्ट होनी चाहिए।

apache2_logo

पहली बात यह है कि मेरी टीम में क्या क्षमता है? यदि मैं जितना संभव हो सके इसे लागू करने के लिए कितने उपकरण एक साथ जुड़ सकते हैं? यह सब एक कारक पर निर्भर करता है; RAM (रैंडम एक्सेस मेमोरी)।

रैम जितनी अधिक होगी, कनेक्शनों की संख्या उतनी अधिक होगी, हालांकि कोई निश्चित मान नहीं है (जो कि प्रत्येक एक्स रैम के लिए एक्स क्लाइंट है), यही कारण है कि सबसे पहले हमारे वेब सर्वर पर कुछ छोटी गणना करना महत्वपूर्ण है हमारी सीमा जानने के लिए।

पहली चीज़ जो आपको पता होनी चाहिए कि अपाचे का प्रत्येक कनेक्शन औसतन कितना रैम है, क्योंकि प्रत्येक कनेक्शन स्थापित सिस्टम में रैम की एक निश्चित खपत को दबा देता है ... जाहिर है कि सभी कनेक्शन एक ही रैम का उपभोग नहीं करते हैं, जिसके साथ एक को बनाना होगा एक मीडिया ... यह सब निम्नलिखित कमांड के साथ प्राप्त किया जा सकता है:

ps -ylC apache2 --sort: rss | awk '{SUM + = $ 8; I + = 1} END {प्रिंट SUM / I / 1024} '

प्राप्त परिणाम मेगाबाइट में दर्शाया जाएगा और सक्रिय कनेक्शनों की संख्या, एक्सेस किए गए पृष्ठों के प्रकार आदि के आधार पर भिन्न हो सकता है ... इसलिए, अलग-अलग टैब के साथ परीक्षण को बाहर ले जाने की सलाह दी जाती है; यदि संभव हो तो उनमें से प्रत्येक अलग सामग्री दिखा रहा है। मेरे मामले में, उदाहरण के लिए, परिणाम 9.5458 रहा है, जो कि अगर हम इसे ऊपर तक गोल करेंगे तो होगा 10 एमबी रैम प्रति कनेक्शन औसतन खपत करता है।

यह जानना भी महत्वपूर्ण है कि सिस्टम में सक्रिय बाकी प्रक्रियाओं द्वारा कितनी रैम का उपभोग किया जाता है, क्योंकि वेब सेवा केवल वही नहीं है जो ऑपरेटिंग सिस्टम में चलती है और सर्वर पर मुफ्त रैम को छोड़ना आवश्यक है ताकि यह बाकी कार्यों को निष्पादित कर सके। यह नीचे दिखाए गए आदेश के साथ प्राप्त किया जा सकता है:

ps -N -ylC apache2 --sort: rss | awk '{SUM + = $ 8} END {प्रिंट SUM / 1024}'

प्राप्त परिणाम को मेगाबाइट में भी दर्शाया जाएगा, और यह बाकी प्रक्रियाओं द्वारा रैम की मात्रा का काफी सटीक रूप से हमें दिखाएगा; मेरे मामले में 800 एमबी। इस जानकारी के साथ हम एक साथ कनेक्शन की एक सामान्य गणना कर सकते हैं जो हमारे पास हो सकती है; मैं गणना करता हूं कि हम एक बहुत ही सरल ऑपरेशन के माध्यम से प्राप्त करेंगे।

(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

हाथ में इस सूत्र के साथ, आइए कल्पना करें कि हमारे पास 4 जीबी रैम के साथ एक कंप्यूटर है, जो कि 4096 एमबी है और हमारे कंप्यूटर ने उपरोक्त परिणाम दिखाए हैं; गणना होगी:

(4096 - 800) / 10 = 329 एक साथ कनेक्शन

इस गणना के साथ समस्या यह है कि एक बहुत चरम है, क्योंकि यह सभी रैम (सर्वर को स्वैप का उपभोग करता है) का उपभोग करेगा और साथ ही, डेटाबेस होने के मामले में, जैसे कि MySQL या कोई अन्य, इसके लिए कनेक्शन भी उपभोग करेगा। रैम, इसलिए प्राप्त संख्या एक यूटोपियन नंबर के रूप में योग्य हो सकती है। इसलिए, संभव अतिरिक्त प्रक्रियाओं के लिए मेमोरी को मुक्त करने के लिए और इस संभावना पर भी विचार करें कि डेटाबेस से कनेक्शन निष्पादित किए जाते हैं, हम कनेक्शन की संख्या कम कर देंगे। 250.

अब हमारे पास एक साथ कनेक्शन की अधिकतम संख्या है, हमें इस नंबर को प्राप्त करने में सक्षम होने के लिए अपाचे तैयार करना होगा, जो इस कॉल की कॉन्फ़िगरेशन फ़ाइल में किया जाता है apache2.conf, जिसकी मेजबानी की जाती है / Etc / apache2.

विचाराधीन फ़ाइल एक संरचना पर आधारित है मॉड्यूल, प्रत्येक अपने संबंधित नाम के साथ, लेकिन हम केवल उनमें से एक में रुचि रखते हैं, जिसका नाम है  mpm_prefork_module। प्रश्न में मॉड्यूल में डिफ़ॉल्ट रूप से निम्न डेटा है:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerhh 0

इस मॉड्यूल में बहुत महत्वपूर्ण मापदंडों की एक श्रृंखला है, हालांकि उनमें से एक है जो विशेष रूप से हमें रुचि देगा, कहा जाता है Maxclients। यह पैरामीटर एक साथ कनेक्शन की अधिकतम संख्या निर्दिष्ट करता है और इसे संशोधित किया जाना चाहिए 250.

ध्यान में रखने के लिए एक विवरण यह है कि जब डिफ़ॉल्ट के अलावा कोई मान उक्त पैरामीटर में निर्दिष्ट किया जाता है, तो यह एक और एक और जोड़ने के लिए आवश्यक है। यह पैरामीटर कहा जाता है ServerLimit और सीमा की सीमा से बाहर होने पर भी सर्वर "होल्ड" कर सकता है।

ServerLitit पैरामीटर को हमेशा MaxClients की तुलना में थोड़ा अधिक होना चाहिए और यहाँ, पैंतरेबाज़ी के लिए बहुत कम जगह है, की एक सीमा 270। इससे मॉड्यूल इस तरह दिखाई देगा:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 270 MaxClients 250 MaxRequestsPerChild 0

अब केवल कमांड का उपयोग करके अपाचे सेवा को फिर से शुरू करना आवश्यक होगा: 

/etc/init.d/apache2 पुनरारंभ करें

इससे हम पहले से ही अपने अनुकूलित वेब सर्वर का आनंद ले सकते थे।

नमस्ते.


अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   Zetatino कहा

    पोस्ट के लिए धन्यवाद!

    1.    द्रास कहा

      मुझे खुशी है कि आपने इसे उपयोगी पाया।

      नमस्ते.

  2.   माइकल एंजेलो कहा

    Apache और दो सर्वर को क्लस्टर करने का एक तरीका है, क्या आप बता सकते हैं कि यह कैसे काम करता है?

    1.    द्रास कहा

      हालाँकि मैंने इसके बारे में कुछ सिद्धांत पढ़े हैं, लेकिन मैंने इसे अभ्यास के लिए कभी लागू नहीं किया है। फिर भी, शायद यह लेख आपको इस संबंध में कुछ मार्गदर्शन दे सकता है, हालांकि मैं दोहराता हूं कि मुझे इसे व्यवहार में लाने का अवसर नहीं मिला है:

      http://www.muspells.net/blog/2011/04/alta-disponibilidad-con-apache2-y-heartbeat-en-debian-squeeze/

    2.    एडुआर्डो जलील कहा

      तुमने बहुत समय मांगा है, अगर तुमने हल नहीं किया; मेरे पास एक तीसरी पार्टी के साथ एक संतुलन योजना है जो फ़ाइल सिस्टम के रूप में कार्य करती है, आप उन फ़ोल्डरों को इंगित करते हैं जो var / www / html / (मेरे मामले में) फ़ाइल सिस्टम में हैं, इसलिए वे समान जानकारी साझा करते हैं, और आप संभवतः एक वर्चुअल आईपी की आवश्यकता होती है जो एप्स के ips को प्रतिसाद देता है और रीडायरेक्ट करता है, इसके लिए आप एक हाईप्रोफाइल पर कब्जा कर सकते हैं और यदि आप इसे उच्च उपलब्धता में चाहते हैं तो आप एक गिरने की स्थिति में रखने वाले को एकीकृत कर सकते हैं, दूसरा जवाब देना जारी रखता है, या यदि आपके पास पहले से है एप्लिकेशन के लिए एक डोमेन, आप दोनों सर्वरों के लिए बैकएंड कर रहे पाउंड के साथ संतुलन कर सकते हैं, विशेष मामलों के लिए जैसे मूडील या कुछ एप्लिकेशन जो mysql में एक डेटाबेस से जुड़ते हैं, आपको प्रति ऐप सर्वर एक उपयोगकर्ता बनाना होगा जो एक ही डेटाबेस को इंगित करता है ।

  3.   शमरू कहा

    पोस्ट के लिए बहुत बहुत धन्यवाद, आप बिल्कुल सही हैं, राम प्राथमिक गणना है, हालांकि मैं कल्पना करता हूं कि हम उन अधिकतम प्रक्रियाओं की भी गणना करते हैं जिन्हें हमारा प्रोसेसर संभाल सकता है (बेशक, पहले मुख्य मेमोरी की गणना कर रहा है) और डिस्क को हार्ड कैसे वितरित किया जाएगा (उदाहरण विभाजन / var = 1TR)।

    1.    द्रास कहा

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

      इन सभी कारकों को नियंत्रित करने और यह देखने का एक अच्छा तरीका है कि क्या हमारे प्रोसेसर को संतृप्त नहीं किया गया है या यदि हमारे पास थोड़ी सी भी मुफ्त रैम है, तो वह बैश स्क्रिप्ट का उपयोग करके होगा। आपको यह पोस्ट मिल सकती है कि मैंने कुछ दिनों पहले दिलचस्प बनाया था कि मैं आपको निम्नलिखित लिंक में छोड़ देता हूं; यह एक वैश्विक निगरानी है लेकिन यह एक के लिए दिलचस्प हो सकता है:

      http://bytelearning.blogspot.com.es/2015/07/controlando-la-salud-del-equipo-con-bash.html

      सादर

  4.   सर्जियो एस कहा

    बहुत अच्छा नोट, बहुत बहुत धन्यवाद!

    1.    द्रास कहा

      आपका बहुत बहुत धन्यवाद! मुझे आशा है कि आप इसका लाभ उठाने में सक्षम होंगे।

  5.   विदूषक कहा

    मैं एक झटका नहीं बनना चाहता ...
    … लेकिन कनेक्शन की संख्या बढ़ाकर आप डीडीओएस हमले के लिए अधिक असुरक्षित नहीं हैं?

    1.    द्रास कहा

      यह कोई शांत क्रेटिन प्रश्न नहीं है। सच्चाई यह है कि एक साथ कनेक्शनों की संख्या में वृद्धि करके, हम आंशिक रूप से डीडीओएस हमलों के खिलाफ अपाचे को मजबूत करते हैं, क्योंकि आपको यह ध्यान रखना होगा कि सर्वर पर स्थापित अधिकतम एक साथ कनेक्शनों की संख्या कुल अधिकतम कनेक्शनों की संख्या है, न कि उन लोगों से जो आ रहे हैं। एक अकेला उपयोगकर्ता। इस प्रकार, जबकि शुरुआत में हम केवल 150 एक साथ कनेक्शनों का समर्थन कर सकते थे (चाहे वे वैध स्रोत से कनेक्शन हों या नहीं) अब हम अपने सर्वर का समर्थन करने के लिए एक ही समय में अधिक से अधिक संख्या में कनेक्शन की आवश्यकता के बिना गिन सकते हैं। सर्विस। जाहिर है, अधिक से अधिक संख्या में कनेक्शन बढ़ाना इस प्रकार के हमले से बचाने का तरीका नहीं है, बल्कि फायरवॉल नीतियों को लागू किया जाना चाहिए। यदि, उदाहरण के लिए, आप जिस वेब सेवा को रखना चाहते हैं, वह इंटरनेट के संपर्क में आने वाली है, तो एक सुरक्षा उपाय जिसे लागू किया जा सकता है, वह इन पंक्तियों के अलावा हमारे फ़ायरवॉल के लिए भी होगा:

      iptables-INPUT -p tcp –syn –dport 80 -m conjlimit –connlimit-upto तक 10 मी राज्य -स्टेट न्यू -j ACCEPT

      iptables-INPUT -p tcp –dport 80 -m राज्य -स्टेट स्थापित, संबंधित -j ACCEPT

      iptables-INPUT -p tcp –dport 80 -j DROP

      1.    विदूषक कहा

        DDoS हमलों की एक विशेषता यह है कि एक हमलावर कई अलग-अलग दिशाओं से पैकेट भेजने के लिए प्रकट हो सकता है, जो केवल एक दिशा से आने वाले पैकेट के प्रवाह को रोकता है।

    2.    द्रास कहा

      आप इस अर्थ में सही हैं कि मैंने जो आग लगाई है, वह DDOS हमले के खिलाफ बहुत कुशल नहीं है, क्योंकि यह विभिन्न स्रोतों से आता है। फिर भी, इन स्रोतों में से प्रत्येक के लिए कनेक्शन की संख्या को सीमित करने के बजाय 10 तक सीमित करना बेहतर है, ताकि प्रत्येक स्रोत सौ कनेक्शन या अधिक स्थापित कर सके।

      किसी भी मामले में, प्रश्न की किट यह है कि सर्वर जितना अधिक एक साथ कनेक्शन का समर्थन करता है, डीडीओएस हमले के साथ इसे खटखटाना उतना ही मुश्किल होगा, जिससे पृष्ठ के लिए एक हमलावर द्वारा खटखटाना अधिक कठिन हो जाएगा। ।

      नमस्ते.

  6.   एलियोटाइम३००० कहा

    अच्छा। अभी के लिए मैं अपनी साइट पर एनजीआईएनएक्स के साथ जारी रखता हूं ताकि वीपीएस पर अत्याचार न हो।

  7.   ब्रूनो कैसियो कहा

    अच्छी पोस्ट @Dassass!

    मैं विन्यास के मुकाबले कुछ अधिक सांख्यिकीय रूप से योगदान देना चाहता था।
    यद्यपि उपभोग पैरामीटर की गणना करने का सबसे आसान और तेज़ तरीका माध्य के साथ है, शायद हम अधिक कठोर हो सकते हैं और "माध्य" के बजाय "माध्यिका" का उपयोग कर सकते हैं। हमें क्या बचाएंगे? यदि कनेक्शन किसी मेमोरी की खपत करता है, तो संख्याएँ शूट होती हैं। उदाहरण के लिए, मान लें कि स्मृति (या KB, MB, MiB, आदि) की इकाई में निम्नलिखित मानों का उपभोग करने वाले निम्नलिखित ग्राहक हैं:

    10, 15, 150, 5, 7, 10, 11, 12

    औसत लगभग 30 देगा

    और इसका कारण यह है कि हमारे पास बहुत बड़ा अंत (150) है, और गणना पागल है। माध्यिका में इन आंकड़ों को क्रमबद्ध करने, 2 (हमारे केंद्र) द्वारा नमूनों की संख्या को विभाजित करने और फिर उस स्थिति की संख्या प्राप्त करना शामिल है। इसके साथ ही हमारे पास कुछ ऐसा होगा

    5, 7, 10, 10, 11, 12, 15, 150

    तो हमारा मतलब होगा: 8/2 = 4 जो कि ~ 10 है

    यहां आप देख सकते हैं कि चरम कितना भी पागल क्यों न हो, यह हमेशा हमें अधिक यथार्थवादी मूल्य देगा। यदि हम एक ग्राहक को जोड़ते हैं जो 200 का उपभोग करता है, तो हमारा औसतन 11 होगा, जबकि औसत …… हो सकता है।

    यह केवल एक योगदान है, और यह बहुत ही बहस का विषय है, क्योंकि कनेक्शन के साथ यह खराब नहीं है।

    गले लगाओ लोग linuxera era

  8.   कार्लोस कहा

    नमस्कार, मुझे अपने समर्पित सर्वर पर एक समस्या हुई है, और यह है कि हर बार लगभग 250 लोगों की संख्या ऑनलाइन पहुंचती है, वास्तविक समय में Google विश्लेषिकी के अनुसार, मेरा सर्वर जैसे गिरता है और कनेक्शन धीमा हो जाता है वेबसाइट के लिए और कभी भी उपयोगकर्ताओं की संख्या से अधिक ऑनलाइन अपलोड नहीं करता है, लेकिन जब मैं 8 जीबी रैम को समर्पित सर्वर का प्रदर्शन देखता हूं तो यह 10% उपयोग दिखाता है, सीपीयू: 5% उपयोग और हार्ड डिस्क में: 1.99% काम का।
    क्या आप मेरी मदद कर सकते हैं? मुझे नहीं पता कि क्या करना है, क्या ये उपाय समाधान कर रहा है?

    1.    द्रास कहा

      अच्छा कार्लोस।

      जब आप सर्वर ठीक से तैयार नहीं होते हैं, तो आपके द्वारा वर्णित समस्या बहुत आम है। आपका सर्वर संभवतः बहुत कम संख्या में एक साथ कनेक्शन स्वीकार करेगा और जब यह 250 कनेक्शन तक पहुंच जाएगा तो यह दुर्घटनाग्रस्त हो जाएगा। मैनुअल का पालन करके आप समस्या को हल करने में सक्षम होना चाहिए, हालांकि यदि आपके पास उस सर्वर पर एक डेटाबेस है, तो आपको उस डेटाबेस को भी अनुकूलित करना होगा।

      नमस्ते.

      1.    कार्लोस कहा

        Drassill, मैंने आपके द्वारा बताए गए कॉन्फ़िगरेशन को किया है और यह संतोषजनक है, कल मैं 280 उपयोगकर्ताओं तक ऑनलाइन पहुंच गया था और सर्वर क्रैश नहीं हुआ था, मैं इस परिणाम से बहुत खुश हूं, और मैं दूसरी बात भी करना चाहता हूं जो आप मुझे बताने के लिए कहेंगे डेटाबेस, ¿मैं इसे कैसे प्राप्त करूं?

    2.    द्रास कहा

      डेटाबेस अवधारणा काफी खुली है; mysql का उपयोग पोस्टग्रेज (उदाहरण के लिए) के समान नहीं है। जाहिर है मैं सभी डेटाबेस नहीं जानता; मैंने mysql और पोस्टग्रेट्स की कोशिश की है, और इनमें एक साथ कनेक्शन की वृद्धि पैरामीटर अधिकतम कनेक्शन पर आधारित होगी; mysql का अनुकूलन /etc/my.conf में किया जाएगा और पैरामीटर अधिकतम कनेक्शन को (दूसरों के बीच) बदलना होगा। इसके बजाय पोस्टग्रेज के लिए, मेरे पास अपने ब्लॉग पर एक लेख है जो बताता है कि इसे कैसे अनुकूलित किया जाए जो आपके लिए उपयोगी हो या जिसे आप अपने डेटाबेस के लिए संदर्भ के रूप में उपयोग कर सकते हैं:

      http://bytelearning.blogspot.com.es/2016/02/postgresql-una-alternativa-mysql-en.html

      नमस्ते.

  9.   एरिकसन वास्केज़ कहा

    नमस्कार, जब मैं पहली कमांड को फेंकता हूं, तो यह मुझे वैल्यू दिखाता है। 0. यह क्या हो सकता है?

  10.   डैनियल ओजेदा कहा

    इस पोस्ट के लिए आपका धन्यवाद।

  11.   रोलैंडो एगुइलेरा सालाज़ार कहा

    क्या अच्छा मैनुअल है, वह जानकारी जो मैं खोज रहा हूँ उसका हिस्सा है... धन्यवाद!

    लेकिन अब, अगर मैं चाहता हूं कि जब उन 250 आगंतुकों को पार कर लिया जाए, तो आगंतुक 251 प्रतीक्षा पृष्ठ या आभासी कतार में चला जाता है, क्या मैं इसे इसी कॉन्फ़िगरेशन से कर सकता हूं?

    बधाई और धन्यवाद!