मेरा सेटअप: मेरे पास 3 समान वेबसर्वर मशीनें हैं जो डीएनएस पर सरल भार संतुलन के साथ एक ही उच्च भारित डायनामिक वेबसाइट की सेवा प्रदान करती हैं। सेवा एक ही अपाचे विन्यास के साथ दो साल से अधिक समय से काम कर रही है: Apache2, php5, ubuntu 8.04 linux 2.6.24-29-server।
मेरी समस्या: लगभग दो सप्ताह पहले से मैं इस विन्यास की समस्याओं का सामना कर रहा हूँ। लगभग हर दिन मेरे पास लगभग 5 मिनट के लिए एक छोटा पल होता है, जिसमें वेबसाइट उपलब्ध नहीं है। मैं अभी भी ssh पर सर्वर में लॉगिन करने में सक्षम हूं। अगर मैं दौड़ता htop
हूं, तो मैं देखता हूं कि मशीन कुछ नहीं कर रही है। मेरे पास लगभग 1000 अपाचे प्रक्रियाएं चल रही हैं, लेकिन कोई सीपीयू गतिविधि नहीं है।
मैंने इस स्थिति को डीबग करने के लिए अपाचे mod_status का उपयोग किया है। प्रक्रिया स्कोरबोर्ड इस तरह दिखता है:
_C.___K_______________________R._______.__K_K____K___C_______.__
_______C__________.___________________________________.________C
_.____K__________K___K_WK_____._K_____________________________._
W______K__________K________.____________________._______C_______
_C_.__K__K____.._.._____________________________________C_______
_R___________K___.______C________.C_________.______._____C______
____________KKC____K_____K__WC_________________C_____.__.____.__
_____________________C_________K______.____C______._____________
_.___C____.___.___________________________.K______.____K________
W__.___________________C.__.____K________K_______R_._.__._______
__C__C_.__________C__C_______._____W______________C_.___C_______
____.______C_____________C________.____C____________.________._K
__.__________.K_____________K_________._____C____.K__________KW_
__K.W________R_________._______.___W___________.____.__K_____W__
W___.___..________W____K
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
इसलिए अधिकांश प्रक्रियाएं केवल कनेक्शन की प्रतीक्षा कर रही हैं। लगभग 5 मिनट के बाद स्थिति सामान्य हो जाएगी: मेरे पास प्रत्येक मशीन पर बहुत कम प्रक्रियाएं हैं, अधिकांश श्रमिकों के पास "" है - स्थिति (वे एक अनुरोध को संसाधित करने के लिए खुले हैं) और निश्चित रूप से वेबसाइट उपलब्ध नहीं है!
इसलिए मैं लॉग में कुछ खोजने की कोशिश कर रहा हूं, लेकिन बस कुछ भी नहीं है ... अपाचे एक्सेस लॉग लगभग 4 मिनट के लिए चुप है, वही त्रुटि लॉग के लिए है। मैं भी अन्य सिस्टम लॉग में कुछ भी गलत नहीं समझ सकता।
सभी 3 वेबसर्वर्स पर स्थिति समान है (उन सभी में यह लोड पीक और एक ही समय में अनुत्तरदायी स्थिति है), इसलिए मुझे नहीं लगता कि यह हार्डवेयर से संबंधित है। लेकिन मुझे लगता है, यह कुछ नेटवर्क (tcp) समस्या से संबंधित हो सकता है।
कोई विचार?
संपादित करें: कुछ और जानकारी, जो मैंने अभी खोजी है:
यह बस फिर से हुआ है और मैं यह सत्यापित करने में सक्षम था कि यह समस्या होने पर मैं स्थानीय रूप से कनेक्ट करने में सक्षम नहीं हूं।
मैंने ऐसा होने के बाद निम्नलिखित कमांड के साथ कुछ कनेक्शन आँकड़े बनाए हैं: netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c
- 109 CLOSE_WAIT
- 2652 की स्थापना की
- 2 FIN_WAIT1
- 11 LAST_ACK
- 12 लिस्टेन
- 91 SYN_RECV
- 1 SYN_SENT
- 16 TIME_WAIT
अगर मैं कुछ समय बाद उसी कमांड को निष्पादित करता हूं, तो मेरे पास कुछ इस तरह है:
- 4 बंद
- 108 स्थापित किया गया
- 18 FIN_WAIT1
- 182 FIN_WAIT2
- 37 LAST_ACK
- 12 लिस्टेन
- 50 SYN_RECV
- 11276 TIME_WAIT
इसलिए सामान्य स्थिति में मेरे पास इस क्षण में अपाचे द्वारा नियंत्रित किए जा रहे ग्राहकों द्वारा केवल 100-200 खुले कनेक्शन हैं। जब मेरे पास यह "क्रैश" होता है, तो मेरे पास बहुत अधिक कनेक्शन होते हैं। इसका विश्लेषण करने का सबसे अच्छा तरीका क्या है?
EDIT2: Apache2.conf में महत्वपूर्ण लाइनें हैं:
KeepAlive On
MaxKeepAliveRequests 20
KeepAliveTimeout 1
<IfModule mpm_prefork_module>
ServerLimit 920
StartServers 30
MinSpareServers 80
MaxSpareServers 120
MaxClients 920
MaxRequestsPerChild 700
</IfModule>
यह php_mod के साथ एक अपाचे 2 प्रीफ़ॉर्क है।
सर्वर में 8 जीबी रैम और 4 जीबी स्वैप विभाजन है।
tcpdump
) आपको समस्या की जड़ तक पहुंचने में मदद करे ... btw आपकी स्मृति उपयोग और फ़ायरवॉल नीतियाँ क्या हैं?