httpd मेमोरी उपयोग


13

httpd( Apache/2.2.29) मेमोरी उपयोग के साथ कुछ समस्याएँ होना ।

समय के साथ, httpdप्रक्रियाओं में मेमोरी का उपयोग तब तक रेंगता है जब तक कि यह 100% पर न हो जाए।

पिछली बार जब मैंने दोबारा शुरू किया httpdथा, लगभग 24 घंटे पहले। से आउटपुट free -mहै:

[ec2-user@www ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1655       1415        239          0        202        424
-/+ buffers/cache:        788        866
Swap:         1023          4       1019

यह साबित करने के लिए कि यह निश्चित रूप से है httpd, मैंने पुनः आरंभ किया httpdऔर free -mफिर से भाग गया:

[ec2-user@www ~]$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[ec2-user@www ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1655        760        894          0        202        360
-/+ buffers/cache:        197       1457
Swap:         1023          4       1019

तो, अपाचे को फिर से शुरू करने से 239 एमबी से 894 एमबी तक मुफ्त मेमोरी लगती है - जो एक बड़ी छलांग की तरह लगती है ।

मैं वर्तमान में सक्षम अपाचे मॉड्यूल की सूची से गुजर रहा हूं (इसमें काफी कुछ है) और अक्षम / हटा दिया गया है mod_wsgiऔर mod_perlइनमें से कोई भी इस सर्वर के लिए आवश्यक नहीं है, जो एक PHP- आधारित वेब एप्लिकेशन - मैगनेटो, विशेष रूप से चल रहा है)।

Https://servercheck.in/blog/3-small-tweaks-make-apache-fly के आधार पर , मैंने ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'निम्न आउटपुट प्राप्त किए हैं:

[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}' 15.1328 MB 118.09 MB 127.449 MB 129.059 MB 117.734 MB 113.824 MB 125.062 MB 123.922 MB 119.855 MB 108.066 MB 136.23 MB 114.031 MB 113.27 MB 110.695 MB 102.113 MB 113.234 MB 186.816 MB 118.602 MB 0.835938 MB

अन्य सुझाए गए निदान उपकरण को चलाना MaxClientsजिसके ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'लिए निम्न रिटर्न है:

[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB

इस सर्वर (Amazon AWS m1.smallउदाहरण) में 1.7 GbRAM है। तो इसलिए:

आगे कोई संकेत / सुझाव कि कैसे httpdसेटिंग्स को ट्विक करने के लिए या निदान करने के लिए कि वास्तव में इसके कारण क्या हो सकता है?


ध्यान दें कि प्रक्रियाओं को मेमोरी उपयोग की जांच करने के लिए आपको -/+ buffers/cacheलाइन को देखने की आवश्यकता है ; हालांकि इस मामले में परिवर्तन तुलनीय है। एपाचे को कैसे ट्यून किया गया है, इसके आधार पर, यह अनुरोधों को संभालने के लिए तैयार प्रक्रियाओं के एक जोड़े के साथ शुरू हो सकता है; कई समवर्ती अनुरोधों की अवधि के बाद लोड को संभालने के लिए संभवतः अधिक प्रक्रियाएँ होंगी। निष्क्रिय प्रक्रियाओं की संख्या को भी ट्यून किया जा सकता है। इसलिए यदि अपाचे बहुत अधिक मेमोरी का उपयोग करने के लिए बढ़ता है, तो आपको कुछ ट्यूनिंग करने की आवश्यकता है।
प्रातः

मैं Apache सर्वर कॉन्फ़िगरेशन में ठीक हूँ, लेकिन पिछले दिनों Apache के लिए प्रदर्शन ट्यूनिंग के मामले में एक बड़ी राशि नहीं ली है। कोई भी सुझाव जिस पर मुझे निर्देश या निर्देश देखना चाहिए? क्या एक विन्यास सेटिंग है जिसे मैं अपाचे को एक निश्चित समय के बाद फोर्क की गई प्रक्रियाओं को मारने के लिए कह सकता हूं? (ऐसा लगता है कि अपाचे किसी कारण से डिफ़ॉल्ट रूप से ऐसा नहीं करता है।)
जेम्स स्पिल्टल

यह सटीक कारण है कि मैं अपाचे से दूर चला गया हूँ ... Nginx या यहां तक ​​कि Lighttpd का प्रयास करें।

दिलचस्प। nginxबहुत अच्छी बातें सुनीं, शायद यह समय है जब हम इसे आजमाएंगे, लेकिन ईमानदारी से कहूं तो मैं अपाचे को सालों से इस्तेमाल कर रहा हूं और कभी कोई बड़ी समस्या नहीं आई। Magento वास्तव में स्मृति चबाता है।
जेम्स स्पिल्टल

1
ध्यान दें कि औसत मेमोरी उपयोग की गणना करने के लिए आपकी स्क्रिप्ट में grep httpd-process का कम मेमोरी उपयोग (कम से कम मेरे लिए) शामिल है। इसे ठीक करने के लिए मैं उस रेखा को इस तरह से गणना से बाहर करने की सिफारिश ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
करूंगा

जवाबों:


12

यहाँ मैंने इसे 'हल' करने के लिए क्या किया है:

  1. सेट MaxClients 7(पर आधारित (1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748)

इसलिए:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients         7
MaxRequestsPerChild  4000
</IfModule>
  1. को छोड़कर सभी अपाचे मॉड्यूल अक्षम authz_host_module, log_config_module, expires_module, deflate_module, setenvif_module, mime_module, autoindex_module, negotiation_module, dir_module, alias_module, rewrite_module,php5_module

  2. mod_sslपैकेज को निकालें क्योंकि क्लाइंट https://जो भी उपयोग नहीं कर रहा है ।

एक बार यह नया विन्यास देखने के बाद कुछ समय चल रहा है या नहीं, यह देखने के लिए मैं रिपोर्ट करूँगा।

यहाँ से कुछ प्रेरणा उधार ली गई थी: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ और http://www.activoinc.com/ डाउनलोड / httpd.conf-Magento


उपरोक्त विन्यास ने निश्चित रूप से बड़े पैमाने पर मदद की है।
जेम्स स्पिल्टल

1
कुछ दिनों के बाद, 'मेमोरी लीक' की समस्या httpdपूरी तरह से दूर होती दिख रही है।
जेम्स स्पिटल

2

मुझे डर है कि विकल्प MaxRequestsPerChild ने आपके मामले में मदद की, क्योंकि यह निर्धारित संख्या के अनुरोधों के बाद प्रक्रिया पुनर्चक्रण को सक्षम करता है, इसलिए मेमोरी रिसाव होता है, लेकिन अब दिखाई नहीं देता है।

अतिरिक्त रूप से: MaxClients = ServerLimit * थ्रेड्सप्रिंट

आपके मामले में अगर आपको केवल 7 समवर्ती उपयोगकर्ताओं (MaxClients = 7) की आवश्यकता है, तो यह पूरी तरह से 2 प्रक्रिया के साथ पर्याप्त है (बस अगर कोई डाउनटाइम को कम करने में विफल हो जाएगा), तो कॉन्फ़िगरेशन हो सकता है:

<IfModule prefork.c>
StartServers       2
MinSpareServers    2
MaxSpareServers   20
ServerLimit        2
MaxClients         8
ThreadsPerChild    4
MaxRequestsPerChild  4000
</IfModule>

मैं MaxClients 8 का उपयोग करता हूं , बस 2 प्रक्रियाओं के बीच अधिक समान अनुरोध वितरण करने के लिए।

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