अपाचे मेमोरी उपयोग अनुकूलन


11

अपाचे मेरे सर्वर मेमोरी का बहुत अधिक उपयोग कर रहा है जिससे दुर्घटना हो सकती है। मेरे पास सर्वर में 4GB RAM है।

मैं प्रदर्शन को बेहतर बनाने के लिए अपाचे सेटिंग्स को ठीक करने की कोशिश कर रहा हूं, लेकिन मैं इसमें काफी नया हूं।

मैं इस लेख की सलाह का पालन ​​करने की कोशिश कर रहा था, लेकिन मुझे यकीन नहीं है कि चीजों की गणना कैसे करें और ऐसा लगता है कि मैं इसे बदतर बना रहा हूं।

मेरा शीर्ष इस तरह पढ़ता है:

11697 apache    15   0  322m  37m 4048 S  0.0  0.9   0:00.52 httpd
13602 apache    15   0  323m  37m 3944 S  0.0  0.9   0:00.50 httpd
11786 apache    15   0  322m  36m 4052 S  0.0  0.9   0:00.50 httpd
12525 apache    15   0  322m  36m 4040 S  0.0  0.9   0:00.63 httpd
11806 apache    15   0  322m  36m 3952 S  0.0  0.9   0:00.42 httpd
11731 apache    15   0  322m  36m 4036 S  0.0  0.9   0:00.46 httpd
11717 apache    16   0  322m  36m 3956 S  0.0  0.9   0:00.54 httpd
11659 apache    15   0  322m  36m 3980 S  0.0  0.9   0:00.49 httpd

तो, यह होगा

MaxClients = 3000/ (322-37) = 10

क्या वह सही है? इसके अलावा, अन्य मापदंडों जैसे कि MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild के लिए क्या मान होना चाहिए?

कृपया कोई मेरी मदद करेगा?

अपडेट करें

मैंने कोशिश की है कि आप लोगों ने क्या सुझाव दिया है। यह काम करता है, लेकिन बस थोड़ी देर के लिए। सर्वर शुरू होने के कुछ समय बाद मेमोरी का उपयोग बढ़ता रहता है और कभी नीचे नहीं जाता।

मेरा मतलब है, सर्वर शुरू करने के बाद, मान लें कि 500 ​​उपयोगकर्ता ऑनलाइन हैं। सर्वर X रैम का उपभोग करेगा। इसके 2 घंटे बाद, उसी 500 उपयोगकर्ताओं के साथ ऑनलाइन, सर्वर 10X रैम की खपत करेगा।

क्या इससे बचने का कोई तरीका है या मुझे समय-समय पर सर्वर को देखते रहना और उसे फिर से चालू करना होगा?


1
अपने प्रश्न में अपडेट जोड़ते समय, कृपया उत्तर पोस्ट करने के बजाय मूल को संपादित करें। इसमें प्रश्न को आगे के पृष्ठ के शीर्ष पर फिर से उछालने का अतिरिक्त बोनस भी है।
बेन पलब्रो

जवाबों:


14

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

ट्यूनिंग MaxClientsका एक तरीका सिस्टम की मेमोरी उपयोग का निरीक्षण करना और आवश्यकतानुसार सेटिंग को ऊपर / नीचे ट्वीक करना है। यदि सर्वर इसे नीचे संपादित करने के लिए स्वैप करना शुरू करता है। यदि सर्वर में मुफ्त मेमोरी है, तो इसे ऊपर रखें।

आप अपाचे के मेमोरी उपयोग को देखकर भी अधिकतम मूल्य का अनुमान लगा सकते हैं। स्मृति द्वारा प्रक्रियाओं को क्रमबद्ध करने के लिए शुरू topऔर दबाएं M। आपको कुछ इस तरह देखना चाहिए:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18698 apache    17   0  141m  59m  41m S  0.0  1.6   4:57.46 httpd
18591 apache    17   0  141m  59m  41m S  0.0  1.5   4:54.79 httpd
22917 apache    16   0  141m  57m  39m S  0.0  1.5   4:57.44 httpd
18595 apache    16   0  142m  57m  38m S  0.0  1.5   5:23.43 httpd
18697 apache    16   0  139m  56m  41m S  0.0  1.5   5:09.29 httpd
18735 apache    25   0  141m  56m  38m S  0.0  1.5   5:05.32 httpd

अपाचे उदाहरण के लिए अनुमानित मेमोरी उपयोग प्राप्त करने के लिए RES और SHR कॉलम को घटाएं। इस मामले में यह 16MB के आसपास है। अगर मेरे पास 4GB RAM है और काश 3GB का उपयोग Apache के लिए किया जाए तो मेरी MaxClients सेटिंग लगभग हो जाएगी:

MaxClients = 3000/16 = 188

तो, इस मामले में, मैं १५०-२०० के मूल्य के साथ शुरू कर सकता हूं, लेकिन मैं मेमोरी का उपयोग देखूंगा और अगर यह कभी स्वैप का उपयोग करने के करीब होने लगा तो मैं अधिकतम १०-२०% कम हो जाएगा। यह भी ध्यान दें कि 3GB का मूल्य एक यादृच्छिक उदाहरण है। केवल Apache चलाने वाले सर्वर पर मैं लगभग 4GB का उपयोग कर सकता हूं। अन्य मामलों में मैं केवल अपाचे के लिए 1 या 2 जीबी चाहता हूं, शेष को अन्य एप्लिकेशन, सिस्टम या कैश के लिए बचा सकता है।

संपादित करें: अतिरिक्त प्रश्नों के उत्तर देना

आम तौर पर MaxClients या अन्य अपाचे कॉन्फ़िगरेशन मापदंडों का कोई जादू मूल्य नहीं है जो आपके सर्वर को अचानक दो बार तेजी से बना देगा। कुछ सर्वर ठीक चलने के लिए दिखाई देंगे कि क्या MaxClients 10 या 1000 है। दो मुख्य मामले हैं जहां MaxClients सेटिंग "खराब" है:

  • बहुत कम : जब MaxClients बहुत कम है, तो आप ऐसी स्थिति में पहुंच जाएंगे जहां सभी Apache क्लाइंट का उपयोग किया जा रहा है और नए कनेक्शन कतार में चले जाते हैं जो अगले ग्राहक के उपलब्ध होने की प्रतीक्षा कर रहे हैं। यदि आप अपाचे के mod_status को सक्षम करते हैं, तो आप किसी एक समय में कितने क्लाइंट व्यस्त हैं, इसका वास्तविक समय दृश्य प्राप्त कर सकते हैं। इस स्थिति का निदान करना अपेक्षाकृत आसान है क्योंकि उच्च यातायात के समय में साइट धीमी हो जाएगी और सभी ग्राहकों को उपयोग में देखा जा सकता है।
  • बहुत अधिक : जब MaxClients बहुत अधिक है, तो आप सभी रैम को समाप्त करने के मामले में पहुंच जाएंगे और स्वैप का उपयोग करना शुरू कर देंगे। जब ऐसा होता है तो आपकी साइट का प्रदर्शन अनिवार्य रूप से शून्य हो जाएगा (रैम और डिस्क के बीच गति अंतर पर विचार करें)। इस स्थिति का निरीक्षण करना और उसका निदान करना अधिक कठिन हो सकता है क्योंकि एक सर्वर उच्च मैक्सक्लियर के साथ ठीक चलता रहेगा जब तक कि यह यातायात में स्पाइक का अनुभव नहीं करता है। उदाहरण के लिए, एक साइट पर जो एक घंटे में कुछ हिट हो जाती है, मैं अधिकतम MaxClients को 1000 से सेट कर सकता हूं, रैम द्वारा समर्थित से कहीं अधिक, लेकिन कभी भी अपाचे के कारण एक समस्या को एक समय में एक या दो क्लाइंट का उपयोग करने की आवश्यकता नहीं देखी गई। जब मैं ट्रैफ़िक में स्पाइक प्राप्त करूंगा, तो मैं केवल समस्या का समाधान करूंगा, जब तक कि रैम समाप्त नहीं हो जाता है और स्वैप स्थान की आवश्यकता होती है, तब तक समवर्ती रूप से उपयोग किए जाने वाले ग्राहकों की संख्या बढ़ जाती है।

जब मुझे आपके सर्वर, एप्लिकेशन या ट्रैफ़िक का विवरण नहीं पता है, तो मैं निम्नलिखित कॉन्फ़िगरेशन मानों को शुरुआती बिंदु के रूप में सुझा सकता हूं। उन्हें आज़माएं, सर्वर के लोड और उपयोग की निगरानी करें, और आवश्यकतानुसार सेटिंग बदलें।

  • mod_status : इसे सक्षम करें ताकि आप Apache का उपयोग देख सकें। अधिक उन्नत आंकड़ों के लिए Zabbix / Nagios जैसे एक निगरानी एप्लिकेशन इंस्टॉल करें ताकि आप सर्वर उपयोग और ट्रैफ़िक पैटर्न को ट्रैक कर सकें।
  • अधिकतम ग्राहक : 100-200 के मान पर सेट करें। यदि स्मृति और सीपीयू / अपाचे उपयोग को अनिश्चित और मॉनिटर किया जाए तो मैं कम मूल्य के साथ शुरू करूंगा। यह ट्वीक करने का मुख्य पैरामीटर होगा।
  • MaxRequestsPerChild : यह निर्दिष्ट करता है जब Apache क्लाइंट / बच्चे को फिर से शुरू किया जाएगा। कोई गलत मूल्य नहीं है (हालांकि बहुत छोटे मूल्य अक्षम हो सकते हैं) और यह इस बात पर निर्भर करेगा कि आपकी सेवा क्या सामग्री है। डायनामिक कंटेंट के लिए एक बड़ा गैर-शून्य मान (1000 का कहना है) आपकी httpd प्रक्रियाओं को अंततः बहुत बड़ा होने से रोक देगा।
  • अन्य पैरामीटर : जब तक मैंने शेष मापदंडों के बारे में पूरी तरह से बेंचमार्किंग नहीं की है, तब तक उनका अपेक्षाकृत मामूली प्रभाव होना चाहिए जब तक कि आप उन्हें बहुत कम या बहुत अधिक मान पर सेट न करें। चूक का उपयोग साइटों के बहुमत के लिए ठीक होना चाहिए। मापदंडों के एक पूर्ण विवरण के लिए अपाचे प्रीफ़ॉर्क या वर्कर मॉड्यूल प्रलेखन देखें और जो प्रत्येक मॉड्यूल में उपयोग किया जाता है (कोई पैरामीटर जो आप उपयोग नहीं करते हैं उन्हें ट्यून करने का कोई मतलब नहीं है)।
  • बेंचमार्किंग : जैसा कि आप मापदंडों को समायोजित करते हैं, मैं आपके सर्वर की क्षमताओं पर एक मात्रात्मक संख्या प्राप्त करने के लिए ab (ApacheBench) जैसे बेंचमार्किंग टूल या घेराबंदी का उपयोग करने की सलाह दूंगा। लग रहा है या बदतर पर soelying, यह देखते हुए कि यह दुर्घटनाग्रस्त होता है या नहीं, वेब सर्वर के मापदंडों को ट्यून करने के लिए एक अच्छा तरीका नहीं है।

Apache 2.4 के साथ शुरू होने वाले MaxRequestWorkers में MaxClients का नाम बदल दिया गया है।
jastram
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.