हाल ही में, मुझे पता चला कि मेरे ब्लॉग की मेमोरी समय-समय पर "खाई" जा रही थी। बैकएंड में लॉग इन करने के बाद, कभी-कभी देरी होती थी, मुझे संदेह था कि यह अपर्याप्त स्वैप के कारण हुआ था, इसलिए मैंने जोड़ा कुछ गीगाबाइट स्वैप को वीपीएस होस्ट पर भेजा और थोड़ी देर बाद देखा, मैंने पाया कि स्वैप कितना भी बड़ा क्यों न हो, वह धीरे-धीरे "खाया" गया था!
यह स्पष्ट है कि कुछ PHP सेवाएँ VPS की मेमोरी पर कब्ज़ा कर रही हैं और इसे जारी नहीं किया है, जिसके कारण भौतिक मेमोरी समाप्त होने के बाद स्वैप को कॉल करना पड़ता है, जाहिर है, स्वैप भौतिक मेमोरी की तरह कुशलता से नहीं चलता है, इसलिए प्रक्रिया बन जाती है अटक गया। यह देखते हुए कि वर्डप्रेस वेबसाइट वर्तमान में बहुत अधिक थीम और प्लग-इन का उपयोग करती है, ऐसी स्थिति उत्पन्न होना सामान्य है।
एलएनएमपी आर्किटेक्चर में, PHP फास्टसीजीआई मोड में चलता है, आधिकारिक बयान के अनुसार, php-cgi प्रत्येक अनुरोध के अंत में स्क्रिप्ट द्वारा उपयोग की गई सभी मेमोरी को रीसायकल करेगा, लेकिन यह इसे ऑपरेटिंग सिस्टम पर जारी नहीं करेगा, लेकिन जारी रखेगा। इसे होल्ड करने के लिए अगले PHP अनुरोध का जवाब दें। और php-fpm फास्टसीजीआई प्रक्रिया प्रबंधक है, जिसका उपयोग PHP की मेमोरी और प्रक्रियाओं को नियंत्रित करने के लिए किया जाता है।
इसलिए, समाधान php-fpm के माध्यम से प्रक्रियाओं की कुल संख्या और एक ही प्रक्रिया द्वारा कब्जा की गई मेमोरी को अनुकूलित करना है, जिससे php-fpm प्रक्रिया द्वारा बड़ी मेमोरी पर कब्जा करने और मेमोरी जारी न करने की समस्या का समाधान हो सके। अधिक Linux सर्वर अनुकूलन विधियाँ और वेबसाइट निर्माण अनुभव, साथ ही:
- लिनक्स क्रोंटैब कमांड शेड्यूल्ड टास्क बेसिक सिंटैक्स और ऑपरेशन ट्यूटोरियल-वीपीएस/सर्वर ऑटोमेशन
- अलीबाबा क्लाउड जापान वीपीएस होस्ट स्पीड परफॉर्मेंस मूल्यांकन-जापान सॉफ्टबैंक हांगकांग एनटीटी लाइन
- DNS डोमेन नाम रिज़ॉल्यूशन DNSSEC को DNS अपहरण-Google क्लाउड DNS सेटिंग्स DNSSEC को रोकने में सक्षम बनाता है
PS: 14 दिसंबर 2018 को अपडेट किया गया, यदि आपके VPS होस्ट की मेमोरी और प्रदर्शन बहुत अच्छा नहीं है, तो संसाधन खपत को काफी हद तक बचाने के लिए इस समय कैशिंग सक्षम करना सबसे अच्छा है: वर्डप्रेस Nginx fastcgi_cache कैश त्वरण को सक्षम करता है विधि -Nginx कॉन्फ़िगरेशन उदाहरण।
PS: 29 सितंबर, 2019 को अपडेट किया गया, Google द्वारा विकसित सर्वर ऑप्टिमाइज़ेशन आर्टिफैक्ट ngx_pagespeed के कारण, यह इमेज विलंबित लोडिंग, एडेप्टिव वेबप, JS और CSS ऑप्टिमाइज़ेशन और इमेज जैसे ऑप्टिमाइज़ेशन टूल का एक पूरा सेट एकीकृत करता है। अनुकूलन: पेजस्पीड सर्वर ऑप्टिमाइज़ेशन आर्टिफैक्ट-एनजीएनएक्स एनजीएक्स_पेजस्पीड मॉड्यूल को तैनात करता है और त्वरित प्रभावों का अनुभव करता है।
1. php-fpm के मेमोरी उपयोग का विश्लेषण और निर्धारण करें
यदि आप पाते हैं कि वीपीएस होस्ट अटका हुआ है, तो पहले मेमोरी उपयोग की जांच करें। आमतौर पर उपयोग किए जाने वाले कमांड टॉप, ग्लांस, फ्री आदि हैं। जो मित्र इन कमांड को नहीं जानते हैं वे पहले इस विषय की जांच कर सकते हैं कि माइनिंग स्टेशन ऐसा करता है या नहीं: लिनक्स सिस्टम मॉनिटरिंग कमांड का सारांश - प्रदर्शन बाधाओं को खोजने के लिए मास्टर सीपीयू, मेमोरी, डिस्क आईओ, आदि।
वर्तमान VPS होस्ट प्रक्रिया के मेमोरी उपयोग को देखने के लिए Glances कमांड का उपयोग करें और m दबाएँ। जैसा कि नीचे दिखाया गया है (बड़ा करने के लिए क्लिक करें):
3.2 php-fpm प्रक्रियाओं की संख्या कम करें
यदि आपके VPS होस्ट की मेमोरी भरी हुई है और समाप्त हो गई है, तो आप php-fpm प्रक्रियाओं की संख्या = मेमोरी/2/30 के अनुसार अपनी php-fpm प्रक्रियाओं की संख्या की गणना कर सकते हैं 1GB मेमोरी 10- 20 से 20 के बीच होती है, यह आपके PHP द्वारा लोड किए गए ऐड-ऑन पर निर्भर करता है।
3.3 php-fpm कॉन्फ़िगरेशन उदाहरण
यहां, 1GB मेमोरी के साथ php-fpm का VPS कॉन्फ़िगरेशन एक प्रदर्शन के रूप में उपयोग किया जाता है, वास्तविक ऑपरेशन में, सर्वर के प्रदर्शन, PHP आदि के आधार पर सेटिंग मान पर विचार किया जाना चाहिए।
pm = dynamic #dynamic和ondemand适合小内存。
pm.max_children = 15 #static模式下生效,dynamic不生效。
pm.start_servers = 8 #dynamic模式下开机的进程数量。
pm.min_spare_servers = 6 #dynamic模式下最小php-fpm进程数量。
pm.max_spare_servers = 15 #dynamic模式下最大php-fpm进程数量。
4. इस समस्या का समाधान करें कि php-fpm प्रक्रिया मेमोरी जारी नहीं करती है
Php-fpm की मेमोरी उपयोग को कम करने की उपरोक्त समस्या php-fpm प्रक्रियाओं की कुल संख्या को कम करके प्राप्त की जाती है। वास्तविक उपयोग के दौरान, यह पाया गया कि php-fpm प्रक्रिया में अभी भी लंबे समय तक मेमोरी पर कब्जा करने की समस्या है इसे जारी करना. इसका समाधान pm.max_requests की संख्या को कम करना है।
अनुरोधों की अधिकतम संख्या, max_requests, का अर्थ है कि जब PHP-CGI प्रक्रिया द्वारा संसाधित अनुरोधों की संख्या max_requests तक जमा हो जाती है, तो प्रक्रिया स्वचालित रूप से पुनरारंभ हो जाएगी, इस प्रकार मेमोरी जारी करने का उद्देश्य प्राप्त हो जाएगा। उदाहरण के तौर पर 1GB मेमोरी के साथ VPS होस्ट सेटिंग्स लें (यदि आपके द्वारा सेट किया गया मान मेमोरी खाली करने के स्तर तक नहीं पहुंचता है, तो आप इसे कम करना जारी रख सकते हैं):
pm.max_requests = 500
जब php-fpm प्रक्रिया pm.max_requests द्वारा निर्धारित मान तक पहुंच जाती है, तो मेमोरी जारी करने के लिए प्रक्रिया फिर से शुरू हो जाएगी। नीचे दी गई तस्वीर मेरे परीक्षण के बाद का परिणाम है, यह देखा जा सकता है कि php-fpm प्रक्रिया को जबरन समाप्त कर दिया गया था और मेमोरी जारी कर दी गई थी।
5. सारांश
बड़ी मेमोरी और समवर्तीता और उपलब्धता आवश्यकताओं के लिए, स्थैतिक प्रबंधन मोड + सबसे बड़े pm.max_children का उपयोग करने की अनुशंसा की जाती है। यदि यह छोटी मेमोरी वाला सर्वर है, तो डायनेमिक या ऑनडिमांड मोड का उपयोग करने और pm.start_servers और pm.max_spare_servers प्रक्रियाओं की संख्या कम करने की अनुशंसा की जाती है।
वांछित प्रभाव प्राप्त करने के लिए मैंने मापदंडों को समायोजित क्यों नहीं किया? Wzfou.com के अनुभव के अनुसार, php-fpm कॉन्फ़िगरेशन फ़ाइल मापदंडों को सामान्यीकृत नहीं किया जा सकता है, उन्हें सर्वर के स्वयं के प्रदर्शन, WEB गतिशील सामग्री और उपलब्धता आवश्यकताओं के आधार पर समायोजित किया जाना चाहिए यह जांचना सबसे अच्छा है कि क्या कोई मेमोरी लीक है।
9 अक्टूबर, 2019 को अपडेट किया गया, यदि आपके php-fpm पैरामीटर बहुत छोटे समायोजित किए गए हैं, तो 502 त्रुटि हो सकती है समाधान: वर्डप्रेस बैकग्राउंड एडिट सेव मेनू में 502 त्रुटि को हल करें।