php5-fpm: सर्वर pm.max_children पर पहुंच गया


41

मेरे पास Nginx + php5-fpm है । प्रति घंटे कई बार मेरी वेबसाइट अटक जाती है और लॉगफाइल में मैं निम्नलिखित देखता हूं:

चेतावनी: [पूल www] सर्वर pm.max_children सेटिंग (5) पर पहुंच गया, इसे बढ़ाने पर विचार करें।

/etc/php5/fpm/pool.d/www.conf फ़ाइल में निम्न कॉन्फ़िगरेशन है:

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

सर्वर: AMD Opteron ™ 3280, ऑक्टो-कोर, 8x 2.4 GHz, 16 GB DIMM (DDR3)।

मुझे नहीं पता कि मुझे इस सर्वर के लिए www.conf फाइल में कौन से नंबर डालने चाहिए। क्या मैं किसी की मदद कर सकता हूं? धन्यवाद

जवाबों:


40

आपके पीएचपी-एफपीएम तक पहुंचने के कई संभावित कारण हैं max_children। सबसे आम हैं:

  • अपने ग्राहकों से बहुत सारे समानांतर अनुरोध
  • PHP स्क्रिप्ट का धीमा निष्पादन
  • की बहुत कम सेटिंग max_children

अपनी मशीन के चश्मे को देखते हुए, यह मानते हुए कि PHP + Nginx के अलावा और कुछ नहीं है, मुझे लगता है कि आप इसे 5 से अधिक सेट कर सकते हैं। आप कहते हैं कि आपके पास 8 Cores हैं, आमतौर पर Nginx को PHP की तुलना में बहुत कम CPU की आवश्यकता होती है, इसलिए 5 बच्चों के साथ आप शायद उन सभी का उपयोग करने में सक्षम नहीं होंगे। मैं इसे आमतौर पर कोर x 2 की संख्या या कोर x 4 की संख्या की तरह सेट कर रहा हूं , जो आपके PHP स्क्रिप्ट की मेमोरी खपत पर निर्भर करता है।


यह php चैट के साथ एक डेटिंग वेबसाइट है और उपयोगकर्ता लाखों त्वरित संदेश भेजते हैं। कल रात जब मेरे पास ~ 300 उपयोगकर्ता ऑनलाइन थे, कमांड
नेटस्टैट -an

1
मेरे पास वास्तव में एक समान डेटिंग वेबसाइट है। मुझे लगता है कि आपको निश्चित रूप से अधिक PHP बच्चों की आवश्यकता है। मेरा कॉन्फ़िगरेशन निम्नानुसार है: 20k समवर्ती ऑनलाइन उपयोगकर्ता, 8 PHP के साथ 12 PHP मशीनें, प्रत्येक PHP मशीन पर 32 कर्मचारी। यह बहुत अच्छा काम करता है। आपको यह भी देखना चाहिए कि आपके पास कितनी मुफ्त मेमोरी है, मुझे संदेह है कि आपके पास कुछ है, जब तक कि आपका पीएचपी विशाल नहीं है। यदि आपके पास मुफ्त मेमोरी है, तो कुछ और श्रमिकों के लिए इसका उपयोग क्यों न करें?
फिर से खेलना

@ user1821484 यह सही है; pm.max_childrenहै बहुत बहुत कम । 10GB का मान 1GB रैम वाले छोटे VPS सर्वर के लिए उचित है; आपके पास बहुत बड़ा सर्वर है। जब तक आप त्रुटियों को प्राप्त करना बंद नहीं करते हैं, तब तक इस मूल्य को बढ़ाएं, यदि आप ट्रैफ़िक स्पाइक प्राप्त करते हैं, तो इसे फिर से बढ़ाएं।
माइकल हैम्पटन

जवाब के लिए धन्यवाद। मैंने pm.max_children की सेटिंग बढ़ाकर 10 कर दी और अब मुझे यह त्रुटि मिलने लगी: चेतावनी: [पूल www] व्यस्त लगता है (आपको pm.start_servers या pm.min / max_spare-servers को बढ़ाना पड़ सकता है), 16 बच्चों को जन्म देना, 0 हैं निष्क्रिय, और कुल 8 बच्चे। क्या कोई मुझे सुझाव दे सकता है कि मुझे क्या बढ़ाने की आवश्यकता है? धन्यवाद।
user1821484

कोर x 2 या कोर x 4 ध्वनियाँ मेरे लिए बहुत कम हैं। मेरे पास pm.max_children = 48 के साथ 8 कोर और 8GB रैम के साथ एक मशीन है और हम अभी भी pm.max_children चेतावनियों तक पहुँचते हैं । यह मशीन अपने सीपीयू या मेमोरी सीमा के पास नहीं है। एक बेहतर दृष्टिकोण मुझे लगता है कि इसी सेटिंग को संगत nginx (या अपाचे) सेटिंग्स के साथ अनुकूलित करना होगा और यह निर्धारित करना होगा कि प्रत्येक PHP प्रक्रिया कितनी मेमोरी का उपभोग करती है।
एस।

18

मैंने पाया कि pm.max_requests मान सेट करके (जो कि डिफ़ॉल्ट रूप से टिप्पणी की गई है) इन त्रुटियों को ठीक करने में मदद की। यह सेटिंग कुछ अनुरोधों को निष्पादित करने के बाद चाइल्ड रिक्वेस्ट को रिस्पॉन्स करने के लिए बाध्य करती है और अगर आपके कोड या कहीं 3 पार्टी के लिबास में कहीं मेमोरी लीक हो तो यह मददगार हो सकता है।

में /etc/php-fpm.d/www.conf :

pm.max_requests = 500

13

यह लिंक उपयोगी हो सकता है - यह बताता है कि सिस्टम पर मेमोरी की मात्रा के आधार पर बाल प्रक्रियाओं की संख्या की गणना कैसे करें:


7
एक बार लिंक के चले जाने के बाद यह उत्तर बेकार हो जाएगा।
miken32

2
मूल रूप से, लिंक कहता है ... pm.max_children के लिए उपयुक्त मान की गणना इस प्रकार की जा सकती है: pm.max_children = वेब सर्वर / मैक्स चाइल्ड प्रोसेस आकार को समर्पित कुल RAM
jaywhy13
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.