2009-02-01 17 views
51

मेरे पास एक डेबियन मशीन पर अत्यधिक ट्रैफिक एप्लिकेशन है और अपाचे ने अजीब अभिनय करना शुरू कर दिया है।जब मैं अपाचे शुरू करता हूं और अपनी मशीन को मारने के लिए आगे बढ़ता हूं तो मैं कितनी अपाचे प्रक्रियाओं को रोक सकता हूं?

हर बार जब मैं अपाचे शुरू करता हूं, अपाचे की कई प्रक्रियाएं उत्पन्न होती हैं, ऐप बिल्कुल लोड नहीं होता है, और बहुत जल्दी पूरी मशीन फ्रीज होती है और रीबूट करने के लिए पावरसाइक्लिंग होना चाहिए। अधिक apache2 प्रक्रियाओं के साथ बहुत आगे

 
top - 20:14:44 up   1:16,  2 users, load average: 0.48, 0.10, 0.03 
Tasks: 330 total, 5 running, 325 sleeping, 0 stopped, 0 zombie 
Cpu(s): 12.0%us, 21.4%sy, 0.0%ni,  65.7%id, 0.2%wa, 0.1%hi, 0.7%si, 0.0%st 
Mem: 8179920k total,  404984k used, 7774936k free, 60716k buffers 
Swap: 2097136k total,  0k used,  2097136k free, 43424k cached 


10251 www-data 15 0 467m 8100 4016 S 6 0.1 0:00.04 apache2 
10262 www-data 15 0 467m 8092 4012 S 6 0.1 0:00.05 apache2 
10360 www-data 15 0 468m 8296 4016 S 6 0.1 0:00.05 apache2 
10428 www-data 15 0 468m 8272 3992 S 6 0.1 0:00.05 apache2 
10241 www-data 15 0 467m 8256 4012 S 4 0.1 0:00.03 apache2 
10259 www-data 15 0 467m 8092 4012 S 4 0.1 0:00.04 apache2 
10274 www-data 15 0 467m 8056 4012 S 4 0.1 0:00.03 apache2 
10291 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.03 apache2 
10293 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.03 apache2 
10308 www-data 15 0 468m 8296 4016 S 4 0.1 0:00.02 apache2 
10317 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.02 apache2 
10320 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.04 apache2 
10325 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.04 apache2 

और ..:

यहाँ मैं तुरंत अपाचे शुरू करने के बाद शीर्ष के लिए मिल रहा है।

एक मिनट से भी कम समय में, आप नीचे देख सकते हैं कि भार 0.48 से 2.17 हो गया है। अगर मैं इस बिंदु पर अपाचे नहीं रोकता, तो मशीन मरने तक लोड कुछ मिनट या उससे कम समय तक बढ़ता जा रहा है।

 
top - 20:15:34 up 1:17,  2 users, load average: 2.17, 0.62, 0.21 
Tasks: 1850 total, 5 running, 1845 sleeping, 0 stopped, 0 zombie 
Cpu(s): 0.3%us,  2.1%sy, 0.0%ni, 96.4%id, 0.0%wa, 0.1%hi, 1.0%si, 0.0%st 
Mem:  8179920k  total,  1938524k used, 6241396k free, 60860k buffers 
Swap: 2097136k  total,  0k used, 2097136k free, 44196k cached 

हमारे पास फ़ायरवॉल है जहां हम उन पते को श्वेतसूची में डालते हैं जिन्हें हम जानते हैं कि हमारी साइट पर हमला करने की अनुमति है।

समस्या के बारे में कोई भी विचार बहुत स्वागत है।

धन्यवाद!

+0

प्रोग्रामिंग से संबंधित नहीं है ... कृपया शीर्ष आउटपुट के स्वरूपण को ठीक करें। यदि आपको कई समवर्ती कनेक्शन की आवश्यकता है तो अपाचे एमपीएम कार्यकर्ता को देखें; अपनी रखरखाव सेटिंग्स को समायोजित करने से भी मदद मिल सकती है। –

+0

धन्यवाद, हमें उन सभी समवर्ती कनेक्शनों की आवश्यकता नहीं है। वास्तव में चीजें पहले इतने सारे कनेक्शन के बिना ठीक काम कर रही थीं और अभी अजीब अभिनय करना शुरू कर दिया है हालांकि यातायात में कमी आई है। –

+0

लोग इसे बंद करने के लिए क्यों मतदान कर रहे हैं? जब मैं PHP या पायथन में वेब विकास करता हूं, तो मैं अपाचे को अपनी मशीन पर चलाता हूं, और यह एक समस्या हो सकती है जिसे मैं किसी दिन सामना करता हूं। मैं कहूंगा कि यह बहुत प्रोग्रामिंग है। –

उत्तर

10

क्या आपने हाल ही में अपनी कॉन्फ़िगरेशन फ़ाइल बदल दी है? यदि हां, तो मुझे विश्वास है कि आप पुराने संस्करण को अलग करने के लिए रखते हैं?

यदि नहीं, तो "स्टार्टसेवर", "मैक्सस्पियर सर्वर" और "मिनस्पेयर सर्वर" निर्देशों की खोज करें। आम तौर पर आप इन्हें डिफॉल्ट पर छोड़ना चाहते हैं, लेकिन यह संभव है कि वे जानबूझकर उच्च (खराब विचार) सेट करें या खराब कॉन्फ़िगरेशन संपादन के कारण गलती से उस तरह से सेट करें।

यदि यह मदद नहीं करता है, तो यह अपाचे के बाहर देखने का समय है, कुछ प्रक्रियाओं के लिए जो तेजी से कनेक्शन खोल रहा है (हो सकता है कि एक परीक्षण प्रक्रिया है जो अमोक चलाती है)।

पहला चरण एक्सेस लॉग है। दूसरा चरण नेटस्टैट चलाने के लिए है, यह देखने के लिए कि कनेक्शन कहां से आ रहे हैं। और यदि यह एक ही सिस्टम पर चल रहा है, तो आप कनेक्शन के दो सिरों को खोजने के लिए/proc/*/fd में देख सकते हैं।

+0

मैं उस पुराने संस्करण को बहुत अधिक रख सकता हूं। हमारे पास भी हमारे एससीएम में/etc/है। – mark

+0

मैं अपने/etc/apache2 के आधार पर एक गिट भंडार स्थापित करता हूं। Muhaha। – CommaToast

41

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

मुझे लगता है कि आप एक प्रीफ़ोर अपाचे का उपयोग कर रहे हैं, और एक इन-प्रोसेस एप्लिकेशन सर्वर (जैसे PHP या mod_perl)। इस मॉडल में, आप अधिकतम (मैक्सिलेंट्स * प्रति प्रक्रिया आपके आवेदन के अधिकतम मेमोरी उपयोग) के साथ समाप्त हो जाएंगे) स्मृति का उपयोग किया जाता है। यदि आपके पास लगभग इतना नहीं है, तो यह समय कम करने का समय है, दूसरा या दोनों।

सामान्य मामले में, इसका मतलब है उस बिंदु पर मैक्सक्लिंट्स को कम करना जहां आपके सर्वर के पास पर्याप्त RAM है।

आमतौर पर मैक्सक्लिंट्स (150 सामान्य) के लिए उपयोग किए जाने वाले डिफ़ॉल्ट मान एक सामान्य मशीन पर एक इन-प्रोसेस हेवीवेट एप्लिकेशन सर्वर चलाने के लिए उपयुक्त नहीं हैं यदि आप प्रीफ़ोर मॉडल का उपयोग कर रहे हैं (अधिकांश एप्लिकेशन सर्वर या तो समर्थन नहीं करते हैं, या हतोत्साहित, थ्रेडेड मॉडल का उपयोग)।

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

आपको सर्वर-स्थिति (जैसे mod_status द्वारा प्रदान किया गया) पर नजर रखने की आवश्यकता है।

बेशक आपको केवल इन परिवर्तनों में से कोई भी परिवर्तन करना चाहिए यदि आप परिणामों को समझते हैं। दो बार सोचें, एक बार कॉन्फ़िगरेशन बदलें। यदि आपके पास समान उत्पादन गैर-उत्पादन मशीन पर अनुरूपित लोड के साथ परिवर्तनों का परीक्षण करने की कोई क्षमता है, तो ऐसा करें।

+19

"दो बार सोचें, एक बार कॉन्फ़िगरेशन बदलें।" +1 – aaronsnoswell

3

जैसा कहा गया है (प्रीफ़ोर अपाचे मानते हुए) - मैक्सक्लिएंट = अधिकतम प्रक्रियाएं एक साथ में।

आप वास्तव में आप यातायात के साथ ठोक रहे हैं हो रही है (और एक गलत कॉन्फ़िगर किया गया StartServers/न्यूनतम/MaxSpareServers नहीं), वहाँ कुछ अन्य बातें हैं आप कर सकते हैं, तो:

  1. एक अलग सेट करें, हल्के आपकी स्थिर सामग्री के लिए अपाचे प्रक्रिया (या lighttpd)। इस तरह सभी छोटी, स्थिर सामग्री आपके भारी वजन वाले ऐप प्रक्रिया को "प्रदूषित" नहीं करती है। यह सर्वर, या एक अलग पर हो सकता है। मामला नहीं है।
  2. अपनी अपाचे प्रक्रिया के सामने में स्क्विड जैसे रिवर्स प्रॉक्सी रखें। रिवर्स प्रॉक्सी अपाचे से सामग्री को जल्दी से चूस लेगा और इसे मेमोरी में संग्रहीत करेगा और फिर इसे क्लाइंट पर वापस पार्सल करें। इस तरह एओएल 14.4 केबी मॉडेम पर उपयोगकर्ता आपके मूल्यवान अपाचे स्लॉट्स के को हॉग नहीं करते हैं। बोनस के रूप में, इस तरह का सेटअप आपके सामग्री को आपके अपाचे प्रक्रियाओं पर लोड को कम करने के लिए कॉन्फ़िगर करने के लिए कॉन्फ़िगर किया जा सकता है।
2

आपका 'टॉप' आउटपुट दिखाता है कि आपके पास बहुत सारी मुफ्त मेमोरी है, इसलिए मुझे नहीं लगता कि मैक्सक्लिंट्स एक मुद्दा है (जब तक 2 जीबी से अधिक स्मृति आवंटित अपाचे के साथ कोई समस्या न हो?) आपकी त्रुटि लॉग अगर बच्चों को और अधिक बच्चों को बनाने में समस्या आ रही है तो त्रुटियों को दिखाना चाहिए।

अधिकतर, आपकी अपाचे प्रक्रियाएं वास्तव में बहुत सारे संसाधनों का उपयोग कर रही हैं। यदि आप PHP ऐप्स चला रहे हैं, तो eAccelerator इंस्टॉल करने का प्रयास करें जो PHP कोड को अनुकूलित और कैशिंग करने का अच्छा काम करता है। अन्य चीजों में भारी MySQL क्वेरी, एक धीमी DNS रिज़ॉल्वर इत्यादि शामिल हो सकती हैं। इसके अलावा, यह समझने में और अधिक हो जाता है कि कौन से प्रोग्राम हिट किए जा रहे हैं और वे क्या कर रहे हैं।

14

ps -aux का उपयोग करें | apache चालू होने वाली प्रक्रियाओं की संख्या का पता लगाने के लिए grep apache। "आरएसएस" कॉलम के लिए देखें जो प्रत्येक प्रक्रिया द्वारा उपयोग की गई स्मृति का अनुमान देता है। वैकल्पिक रूप से आप "शीर्ष" का उपयोग कर सकते हैं, जहां आप + f को स्थानांतरित करते हैं और फिर स्मृति उपयोग द्वारा प्रक्रियाओं को सॉर्ट करने के लिए% MEM कॉलम का चयन करें।

प्रक्रियाओं की संख्या आपके apache.conf फ़ाइल में "MaxClients" निर्देश द्वारा निर्धारित की जाती है। जिस तरह से आप इस आकृति पर आते हैं, जैसा कि this page द्वारा वर्णित है;

  1. एसएसएच रूट के रूप में आपके सर्वर में।
  2. शीर्ष पर चलाएं।
  3. प्रेस शिफ्ट + एम।
  4. httpd द्वारा उपयोग की जाने वाली उच्चतम RES स्मृति को नोट करें।
  5. शीर्ष से बाहर निकलने के लिए क्यू क्यू दबाएं।
  6. निष्पादित करें: सेवा httpd बंद (Debian में, sudo service apache2 stop)
  7. एक बार httpd बंद कर दिया जाता है, निष्पादित करें: free -m
  8. नोट "पुराना" के अंतर्गत सूचीबद्ध स्मृति।
  9. अपनी वीपीएस योजना के लिए गारंटीकृत मेमोरी पाएं। समर्थन आपको बता सकता है कि अगर आपको यह नहीं मिल रहा है तो आपने कितना गारंटी दी है।
  10. आपकी योजना को गारंटी देने वाली स्मृति से उपयोग की गई स्मृति को घटाएं। यह आपको अपना आधार मुफ्त मेमरी पूल देगा।
  11. अपने औसत उपलब्ध पुल के मूल्य को 0.8 से अपने औसत उपलब्ध अप्पर पुल को खोजने के लिए गुणा करें (यह आपको विस्फोट अवधि के लिए 20% मेमोरी रिजर्व की अनुमति देगा)।
  12. httpd द्वारा उपयोग की जाने वाली उच्चतम आरईएस मेमोरी द्वारा अपने उपलब्ध ऐप पुल को विभाजित करें। यह आपको MaxClients मान देगा जो आपके सिस्टम के लिए सेट किया जाना चाहिए। (यदि यह एक अंश घटक है तो इसे इस मान से कम निकटतम पूर्णांक तक ले जाएं।)

"मैक्सलिएंट्स" के लिए सही मान आपके अपाचे सर्वर के लिए सही स्मृति आवंटन सुनिश्चित करेगा। इस तरह मैंने इसे हल किया।

डेबियन में, अपाचे conf फ़ाइल /etc/apache2/apache2.conf

2

यह सवाल प्राचीन है पर है, लेकिन मैं यहाँ एक जवाब जोड़ने के लिए है, क्योंकि मौजूदा जवाब के सभी ओपी से जानकारी का एक महत्वपूर्ण भाग को अनदेखा कर रहे मजबूर महसूस: के बाद कुछ मिनटों के लिए लोड बढ़ना शुरू हो गया है, top रिपोर्ट करता है कि अभी भी पर्याप्त CPU & मेमोरी संसाधन उपलब्ध हैं। आमतौर पर एक अपराधी शेष होता है, और वह I/O है।

जांचें कि df -h के साथ पूर्ण विभाजन है या नहीं। यदि नहीं, तो देखें कि आपका एप्लिकेशन vmstat 1 10 या iostat 1 10 का उपयोग कर डिस्क को थ्रैश कर रहा है (ये डेबियन/उबंटू पर 'sysstat' पैकेज द्वारा प्रदान किए जाते हैं)। यदि आपको अभी भी कोई समस्या दिखाई नहीं दे रही है, तो शायद आपके पास नेटवर्क-माउंटेड स्टोरेज के लिए डिवाइस स्तर I/O त्रुटियां या नेटवर्क समस्या है। सिस्टम और डेमॉन लॉग फ़ाइलों की जांच करें।

संबंधित मुद्दे

 संबंधित मुद्दे