कैसे Ubuntu 14.04 सर्वर पर अपाचे ट्यून करने के लिए


18

वर्तमान में मेरे Apache 2 (Apache 2.4.7 सटीक होने के लिए) Ubuntu 14.04 पर, मेरे पास यह सेटिंग है:

/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

सर्वर एक 8GB (RAM) अमेज़ॅन सर्वर है जो कुछ Google विज्ञापन अभियानों के लिए तीन-पृष्ठ साइनअप फ़ॉर्म लोड करने से ज्यादा कुछ नहीं करता है।

मुझे वेब पर apachetuneit.sh नामक स्क्रिप्ट मिली , लेकिन फिर थोड़ी देर बाद अपाचे इस त्रुटि की रिपोर्ट कर रहा था:

[मंगल अप्रैल २१ १६: ४५: ४२.२२ 2015३५ २०१५] [mpm_prefork: त्रुटि] [११३४] AH00161: सर्वर MaxRequestWorkers सेटिंग पर पहुंच गया, MaxRequestorkorkers सेटिंग बढ़ाने पर विचार करें

मैं इन सेटिंग्स को कैसे निर्धारित करूं?

मैं विशेष रूप से केवल Apache 2.4 को ट्यून करने के लिए कह रहा हूं और कुछ नहीं। यही कारण है कि इस सवाल का तुलना में अलग है है इस सवाल का



@ जेनीडी यह लेख इस विशिष्ट आवश्यकता के लिए बहुत व्यापक है।
सर्वरचेयर

जिस तरह से आप इन विशिष्ट सेटिंग्स को जज करते हैं वह है आप लोड परीक्षण करते हैं।
जेनी डी

@ जेनीडी यह उससे भी आसान है। बस दिन और औसत में कई बार नियमित लोड के तहत एप स्क्रिप्ट का उपयोग करें, औसत गणित नीचे दिए गए क्लाउड लिंक के अनुसार करें, और उस मूल्य पर MaxRequestWorkers सेट करें। फिर, MaxRequestWorkers के साथ परेशानियों के लिए अपाचे लॉग देखें और अधिक बढ़ाएं, अधिक RAM जोड़ें, CloudFlare जोड़ें, या कोई अन्य वेब नोड जोड़ें। अत्यंत तीव्र भार परीक्षण करने की आवश्यकता नहीं है।
सर्वरचेक

आप उस स्क्रिप्ट के बारे में जानकारी युक्त उत्तर लिख सकते हैं, और आपके द्वारा दिए गए लिंक से प्रासंगिक सामग्री, उस प्रश्न के लिए जिसे मैंने संभावित डुप्लिकेट के रूप में इंगित किया था।
जेनी डी

जवाबों:


45
  1. यह स्वीकार करें कि Ubuntu 14.04 एक mpm_prefork मॉड्यूल के माध्यम से चलने वाले PHP के साथ Apache 2 का उपयोग करता है , जिनमें से एक संपादन योग्य फ़ाइल /etc/apache2/mods-enabled/mpm_prefork.conf में है। इसके अलावा, यह मान लें कि Apache 2.4 में शुरू होने वाले, MaxClients को अब MaxRequestWorkers के रूप में नाम दिया गया है , और इसलिए MaxClients के बारे में किसी भी दस्तावेज को MaxRequestWorkers पर स्विच करने की आवश्यकता है।

  2. अस्थायी रूप से निम्न आदेश के साथ Apache वेब सेवा बंद करें:

    sudo service apache2 stop
  1. 5 सेकंड तक प्रतीक्षा करें और फिर निम्न कमांड का पता लगाएं कि आपके पास मुफ्त में कितनी वर्चुअल मेमोरी है:
    सूद-मुक्त

मेम पढ़ें: लाइन और मुफ्त कॉलम को देखें। इसे राम की उस मात्रा के रूप में मानें जिसे आप अपाचे को समर्पित कर सकते हैं, हालांकि मैं आमतौर पर बीफ़ सर्वर पर 2GB (जैसा कि> 4GB) या लाइटर सर्वर पर 1GB घटाता हूं। इसलिए, यदि मुफ्त कॉलम में कहा गया है कि मेरे पास 13GB मुफ्त है, तो मैं Apache 11GB देने की सलाह दूंगा। वह आधारभूत है। यदि हम कभी-कभी लॉग में किसी डेटाबेस समस्या का सामना करते हैं (जैसे कि 3 दिन की अवधि में लॉग में 3 बार) कि इसे अधिक मेमोरी की आवश्यकता है, तो हम विचार कर सकते हैं कि हमारे पास 11GB के बजाय खेलने के लिए केवल 10GB था (इस मामले में) )। अगर हम अपाचे लॉग में सामना करते हैं कि सर्वर को अधिक मैक्सिरेस्टवेस्टर की आवश्यकता है, तो यह एक अलग मुद्दा है जिसे मैं नीचे संबोधित करूंगा।

  1. Apache वेब सर्वर शुरू करें।
    sudo service apache2 start
  1. 10 ब्राउज़र टैब की तरह खोलें, अपनी वेबसाइट से कुछ लंबे या धीमे लोडिंग पृष्ठों से कनेक्ट करें, और प्रत्येक टैब पर 3-4 बार ताज़ा करें।

  2. ऐसा करने के बाद, तेजी से अब निम्नलिखित कमांड चलाएँ:

    sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {प्रिंट "अपाचे मेमोरी यूसेज (एमबी):" x / 1024; "औसत प्रक्रिया का आकार (एमबी):" x / ((y-1) * 1024)} '

इसे 5 बार तेजी से चलाएं।

औसत प्रक्रिया आकार मूल्य और औसत मूल्य देखें जो आपके द्वारा चलाए गए 5 गुना के बीच है।

अब निम्नलिखित गणित करें, और जीबी को एमबी में बदलना सुनिश्चित करें ताकि सभी नंबर एमबी मान में हों। तो, 1024 गुणा गुणा करें या 1024 से विभाजित करें, इस पर निर्भर करता है कि आपको किस रास्ते पर जाना है।

MaxRequestWorkers = बेसलाइन फ्री (बफर स्पेस के साथ) / औसत प्रक्रिया का आकार

उदाहरण के लिए, मेरे पास 14 जीबी सर्वर था, लेकिन जब अपाचे को रोका गया तो सर्वर ने दिखाया कि इसमें बेकार में 1 जीबी रैम का इस्तेमाल किया गया है। मैं तब ओएस के लिए कुछ अतिरिक्त बफर स्थान में 1 जीबी प्रदान करता हूं, अगर उसे इसकी आवश्यकता होती है। इसका मतलब है कि मेरे पास 12GB का बेसलाइन फ्री होगा। अब मुझे इसे GB से MB में बदलना होगा, और इसलिए मैंने 12 x 1024 को गुणा किया और 12288 प्राप्त किया। 12288 MB मेरी बेसलाइन फ्री वैल्यू है। मेरे मामले में मैंने देखा कि औसत प्रक्रिया का आकार 21 एमबी था। तो, मैं 12288/21 लेता हूं और मुझे लगभग 585 मिलता है। अब, यह सामान्य है कि इस मूल्य के नीचे sysops दौर है, और इसलिए मुझे 580 मिला।

  1. फ़ाइल /etc/apache2/mods-enabled/mpm_prefork.conf को संपादित करें और इसे निम्नलिखित चूक पर सेट करने पर विचार करें, XXX को आपकी MaxRequestWorkers गणना के साथ प्रतिस्थापित करें:


`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

ध्यान दें कि आप सर्वरलिमिट पैरामीटर वहां नहीं देख सकते हैं। इसे जोड़ें। यह पैरामीटर 256 में डिफॉल्ट करता है यदि मौजूद नहीं है, लेकिन MaxRequestWorkers के समान मूल्य की आवश्यकता है या आपको एक त्रुटि मिलेगी।

  1. आपके अपाचे कॉन्फ़िगरेशन में एक और महत्वपूर्ण कारक /etc/apache2/apache2.conf फ़ाइल टाइमआउट चर के साथ है और इसे सेकंड में मापा जाता है। यह कितनी देर तक आप सर्वर से भेज या प्राप्त कर सकते हैं इससे पहले कि यह बाहर हो। आपको फ़ाइल अपलोड या फ़ाइल डाउनलोड को भी ध्यान में रखना होगा, जैसे कि अगर आपके पास एक वेबसाइट है जहाँ लोग उदाहरण के लिए CSV या अन्य बड़ी फ़ाइलों को अपलोड या डाउनलोड कर सकते हैं। और आपको एक व्यस्त डेटाबेस सर्वर को ध्यान में रखने की आवश्यकता है और जहां आपको पृष्ठों के समय से पहले कुछ समय प्रदान करने की आवश्यकता हो सकती है। जितना छोटा आप उस टाइमआउट चर को बनाते हैं, उतना ही नया कनेक्शन प्राप्त करने के लिए वेब सर्वर अधिक उपलब्ध होता है। ध्यान दें, हालांकि, इस मूल्य को बहुत कम सेट करना PHP सत्र चर के साथ कहर पैदा कर सकता है, हालांकि ब्राउज़र सत्र-आधारित कुकीज़ के साथ नहीं। इसलिए, उदाहरण के लिए, 300 का मान (5 मिनट) एक वेब सर्वर के लिए अच्छा हो सकता है जो ब्राउज़र सत्र कुकीज़ के बजाय वेब ऐप वर्कफ़्लो के लिए PHP सत्र चर पर निर्भर करता है। 45 का मान किसी ऐसे वेब सर्वर के लिए अच्छा हो सकता है जो स्थैतिक विज्ञापन लैंडिंग पृष्ठों से अधिक कुछ भी नहीं करता है, लेकिन एक सर्वर के लिए भयानक होगा जो PHP सत्र चर का उपयोग करने के लिए बहुत अधिक आवश्यक है। तो, इस फ़ाइल में टाइमआउट पैरामीटर को उस राशि में संपादित करें जिसकी आपको ज़रूरत है। यह देखने के लिए आपके सभी वेब पृष्ठों के साथ कुछ परीक्षण कर सकता है कि क्या मूल्य बहुत कम है। यह शायद एक अच्छा विचार है, हालांकि, इसे 300 से अधिक सेट न करने के लिए जब तक आप बड़े फ़ाइल अपलोड या बड़े फ़ाइल डाउनलोड में समस्याएं नहीं देख रहे हैं। लेकिन एक सर्वर के लिए भयानक होगा जो PHP सत्र चर का उपयोग करने के लिए एक बड़ा सौदा है। तो, इस फ़ाइल में टाइमआउट पैरामीटर को उस राशि में संपादित करें जिसकी आपको ज़रूरत है। यह देखने के लिए आपके सभी वेब पृष्ठों के साथ कुछ परीक्षण कर सकता है कि क्या मूल्य बहुत कम है। यह शायद एक अच्छा विचार है, हालांकि, इसे 300 से अधिक सेट न करने के लिए जब तक आप बड़े फ़ाइल अपलोड या बड़े फ़ाइल डाउनलोड में समस्याएं नहीं देख रहे हैं। लेकिन एक सर्वर के लिए भयानक होगा जो PHP सत्र चर का उपयोग करने के लिए एक बड़ा सौदा है। तो, इस फ़ाइल में टाइमआउट पैरामीटर को उस राशि में संपादित करें जिसकी आपको ज़रूरत है। यह देखने के लिए आपके सभी वेब पृष्ठों के साथ कुछ परीक्षण कर सकता है कि क्या मूल्य बहुत कम है। यह शायद एक अच्छा विचार है, हालांकि, इसे 300 से अधिक सेट न करने के लिए जब तक आप बड़े फ़ाइल अपलोड या बड़े फ़ाइल डाउनलोड में समस्याएं नहीं देख रहे हैं।

  2. अब अपनी Apache वेब सेवा को पुनः आरंभ करें। यदि आपने कुछ गलत किया है, तो अपाचे आपको इसके बारे में बताएगा कि आप इसे फिर से शुरू करते हैं, और आप इसे सुधार सकते हैं।

    sudo service apache2 पुनरारंभ
  1. अब पहले किए गए 10 टैब ब्राउज़र ट्रिक को दोहराएं और देखें कि क्या आप अपाचे वेब सर्वर त्रुटि लॉग में अपाचे कॉन्फ़िगरेशन त्रुटियों का सामना करते हैं:
    सुडोल पूंछ -f /var/log/apache2/error.log

... उससे बाहर निकलने के लिए CTRL + C दबाएं, आपको चाहिए।

MaxRequestWorkers (और हाल ही में जब से आपने वेब सर्वर को फिर से शुरू किया है) की आवश्यकता के बारे में शिकायत के लिए देखें। यदि आप यह देखते हैं कि एक इष्टतम MaxRequestWorkers सेटिंग के साथ भी, तो आपको अपनी वेबसाइटों या वेब एप्लिकेशन के लिए अधिक गोलाबारी की आवश्यकता है। इन विकल्पों पर विचार करें:

  • बड़े फ़ाइल डाउनलोड, चित्र और स्क्रिप्ट के लिए CDN का उपयोग करना।
  • CloudFlare या अन्य जैसी कैशिंग सेवा का उपयोग करना।
  • एक लोड बैलेंसर के पीछे एक "वेब ऐप" के रूप में कार्य करने वाले कई वेब सर्वर का उपयोग करने के लिए अपनी वेबसाइट या वेब एप्लिकेशन रणनीति को फिर से बनाना।
  • सर्वर में अधिक रैम जोड़ना, और इस तरह यह गणना फिर से करना।

  1. अब जब अपाचे सर्वर को ट्यून किया गया है, यह बेसलाइन ट्यून की तरह है। आपको 2-3 सप्ताह के दौरान इस पर जांच करनी होगी और अपाचे त्रुटि लॉग में MaxRequestWorker मुद्दों की तलाश करनी होगी। उससे, आप अनुकूलन पर निर्णय ले सकते हैं (चरण 10 देखें)। आप मुबीन को उबंटू पर एप्ट के साथ भी स्थापित कर सकते हैं और समय के साथ अपाचे प्रदर्शन को देख सकते हैं और इससे पहले कि आप वेब सर्वर को संभाल रहे हैं यातायात की मात्रा के बारे में कुछ भी करने की आवश्यकता के बारे में निर्णय लेने से पहले वृद्धि का विचार करें।

“जबकि ये लिंक प्रश्न का उत्तर दे सकते हैं, उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं। ”
जेनी डी

@ जेनीडी गुड पॉइंट! वह में स्वयं कर लूँगा।
सर्वरचेयर

@Moderator मुझे इस उत्तर पर स्वरूपण सहायता की आवश्यकता है। चरण 7 को इंडेंट के साथ गोपनीय फाइल माना जाता था। चरण 11 का इंडेंट नहीं होना चाहिए था। कोड कमांड जो sudoकोड के रूप में दिखाने की आवश्यकता से शुरू होता है, सामान्य पाठ के रूप में नहीं। मैंने प्रारूपण पर प्रलेखन का पालन किया, लेकिन फिर भी यहां संघर्ष किया।
ServerCerer

1
मैंने वही किया जो मैं कर सकता था - मार्कडाउन वास्तव में मिश्रित सूचियों और कोड को बहुत अच्छी तरह से नहीं करता है, लेकिन मुझे लगता है कि मैं वैसे भी इसे थोड़ा बेहतर बनाने में कामयाब रहा।
जेनी डी

मेरे जैसे सेंटो-न्यूबॉयस के लिए: ps -lyU apache psy -ylC apache2 के बजाय
user1928596

3

आप MaxRequestWorkers को क्या बढ़ा सकते हैं यह इस बात पर निर्भर करता है कि आपकी प्रत्येक httpd / apache प्रक्रिया में कितनी रैम है। यदि प्रत्येक व्यक्ति 50 एमबी (सिर्फ एक यादृच्छिक संख्या उठा रहा है) लेता है, तो आपके द्वारा उपयोग किए जाने वाले प्रत्येक 20 अनुरोध कार्यकर्ताओं को एक बार (यानी समवर्ती कनेक्शन) 1GB तक का समय लगेगा। तो उस उदाहरण में, आपके पास अधिकतम 8GB * 20 = 160 MaxRequestWorkers हो सकते हैं। हालांकि, आप अपाचे के लिए सभी रैम का उपयोग नहीं कर सकते हैं, आपको वहां चल रहे अन्य चीजों के लिए कुछ आरक्षित करने की आवश्यकता है। इसके अलावा कुछ अतिरिक्त रैम प्रदर्शन के लिए मददगार हो सकते हैं क्योंकि OS चीजों को कैश करने और प्रदर्शन को गति देने के लिए इसका उपयोग करेगा (हालांकि यह कनेक्शन से बाहर नहीं चलना बेहतर हो सकता है क्योंकि सर्वर अतिरिक्त त्वरित होने की तुलना में क्योंकि साइट धीमी दिखाई देगी। उपयोगकर्ताओं के ब्राउज़र एक कनेक्शन के उपलब्ध होने की प्रतीक्षा करते हैं यदि वे सभी उपयोग किए जाते हैं)।


इसे प्रोफाइल करने का एक अच्छा तरीका क्या है? मैं क्या कमांड देख सकता हूं कि प्रत्येक एपाचे प्रक्रिया कितनी रैम लोड के तहत उपयोग करती है? हमें MySQL (एक वर्डप्रेस साइट) और सामान्य सिस्टम प्रक्रियाओं के लिए भी रैम रूम की आवश्यकता है।
सर्वरकैचर

देखें कि freeमेमोरी बेसलाइन प्राप्त करने के लिए कितने प्रोसेस चल रहे हैं और कमांड को चलाते हैं । फिर MinSpareServers को बढ़ाते हुए, Apache को freeफिर से शुरू करने, फिर से चलाने और गणित करने के द्वारा चलने वाली प्रक्रियाओं की संख्या बढ़ाएँ । की जाँच करें moreofless.co.uk/apache-memory-usage अधिक जानकारी और विवरण के लिए।
g491

मुझे अब पता चला कि ऐसा करने के लिए एक सुपर फास्ट तरीका है। यह नीचे दिए गए मेरे जवाब में cloudinservice.com लिंक में उल्लिखित है। आदेश है कि किसी को पता लगा। इसके अलावा, मुझे पता चला कि अब Apache 2.4+ में MaxClients का नाम बदलकर MaxRequestWorkers कर दिया गया है।
ServerChecker
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.