2015-03-17 5 views
11

मेरे पास कुछ उच्च यातायात वेबसाइटों के साथ एक Nginx + PHP5-FPM सर्वर है।PHP5-FPM स्थिर, गतिशील या मांग पर?

PHP5-एफ पी एम पूल config की मेरी समझ से, मैं समझ गया कि:

स्थिर = तुरंत एन बच्चे प्रक्रियाओं बनाने के लिए तो वे खोले जाने के लिए/फिर से खोला, वे पहले से ही खोल रहे हैं की जरूरत नहीं है इस्तेमाल किया जा सकता और जब आवश्यक हो तब इस्तेमाल किया जा सकता है, अन्यथा वे "सो रहे हैं"।

गतिशील = सीमित संख्या में बाल प्रक्रियाओं को खोलने के लिए उपयोग किया जा सकता है और फिर सीमा तक पहुंचने पर फिर से स्पॉन किया जा सकता है (न्यूनतम/अधिकतम सर्वर)।

ondemand = मैं बनाने के लिए बाल प्रक्रियाओं की अधिकतम संख्या निर्दिष्ट करता हूं, और फिर आवश्यकता होने पर, बाल आवश्यकताएं मांग पर बनाई जाती हैं, और जब आवश्यकता नहीं होती है, तो कम स्मृति उपयोग को बनाए रखने के लिए, लेकिन कुछ मिलीसेकंड के प्रतिक्रिया समय को बढ़ाते हैं।

एक उच्च यातायात वर्डप्रेस वेबसाइट के साथ अपने परीक्षण से, मैंने देखा है कि:

अगर मैं का उपयोग "स्थिर", वेबसाइट यकीन है कि तेजी से करने के लिए है और समवर्ती कनेक्शन की तुरंत उच्च संख्या का प्रबंधन कर सकते हैं, लेकिन स्मृति हमेशा बढ़ जाती है इसका उपयोग, और एन घंटों के बाद यह लगभग कुल रैम उपलब्ध है। तो मुझे समय-समय पर (हर 1 घंटा) एक cronjob का उपयोग करना होगा /etc/init.d/php5-fpm रीलोड के साथ PHP5-FPM पुनः लोड करें।

यदि मैं "गतिशील" का उपयोग करता हूं तो यह कम रैम का उपयोग करता है लेकिन एन समवर्ती कनेक्शन के बाद लगातार 502 त्रुटियां होती हैं (लेकिन शायद मैंने इसे ठीक से कॉन्फ़िगर नहीं किया है)।

यदि मैं "ऑनडमंड" का उपयोग करता हूं तो साइट थोड़ी धीमी होती है (जैसे + 50/100ms प्रतिक्रिया समय), लेकिन यह बहुत अधिक रैम का उपयोग किए बिना सभी उच्च ट्रैफ़िक को संभाल सकता है।

तो मेरा निजी निष्कर्ष यह होगा कि "ऑनडमंड" वास्तव में कम/नियंत्रित स्मृति उपयोग के संदर्भ में उपयोग करने का सबसे अच्छा तरीका है, प्रतिक्रिया समय में केवल 5050 मीटर एमएस है, लेकिन मेरे मामले में यह नहीं है एक बड़ी समस्या।

क्या मेरी धारणाएं सही हैं?

+3

सिडेनोट: आप PHP-FPM को क्रॉन का उपयोग किए बिना मेमोरी रिसाव के आसपास काम करने के अनुरोधों के बाद 'pm.max_requests' सेट कर सकते हैं, और हां ओंडेमांड पर्याप्त मात्रा में श्रमिकों के साथ तुरंत शुरू हो गया है। –

+0

"लेकिन स्मृति हमेशा इसका उपयोग बढ़ाती है" --- आप इसे वास्तव में कैसे देखते हैं? – zerkms

+0

आंद्रे मैंने देखा कि pm.max_requests के साथ भी 50 तक सेट स्मृति मेमोरी बढ़ जाती है (वर्डप्रेस + कस्टम थीम + 20 प्लगइन्स लोड)। – user2972081

उत्तर

3

आपने उल्लेख नहीं किया कि आप स्मृति को कम रखना चाहते हैं। मान लीजिए कि यह मशीन PHP-FPM की सेवा करने के लिए समर्पित है, स्मृति कम रखने से आपके एप्लिकेशन को वैसे भी मदद नहीं मिलती है। आपके पास स्मृति है, इसका इस्तेमाल करें।

इसलिए, इस मामले में, "स्थिर" सबसे अच्छा विकल्प है, अधिकतम_क्रॉक्स्ट कुछ ऐसी चीज पर सेट है जो मेमोरी लीक (यदि आपके पास है) को नियंत्रण में रखेगा।

यदि यह मशीन अन्य कार्यों के साथ साझा की जाती है, तो स्मृति कम रखना आदर्श है। इस मामले में, गतिशील और गति के उपयोग के बीच "गतिशील" सबसे अच्छा समझौता है।

"ऑनडमंड" केवल तभी अच्छा विकल्प है जब PHP-FPM इंजन का उपयोग अक्सर किया जाएगा और मशीन का प्राथमिक उद्देश्य कुछ और है।

1

आप PHP-FPM को स्वचालित रूप से फिर से शुरू करने के लिए कॉन्फ़िगर कर सकते हैं यह निर्धारित करके कि बच्चे निर्धारित समय के भीतर मर जाते हैं या नहीं।

वैश्विक विन्यास "php-fpm.conf" में आप PHP-FPM को पुनरारंभ करने के लिए सेट कर सकते हैं यदि 5 बच्चे की प्रक्रिया 1 मिनट के भीतर मर जाती है और ऐसा होने से पहले 10 सेकंड तक प्रतीक्षा करें।

// php-fpm.conf 
emergency_restart_threshold = 5 
emergency_restart_interval = 1m 
process_control_timeout = 10s 

तो आप क्रॉन का उपयोग किए बिना "गतिशील" का उपयोग जारी रख सकते हैं।

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