सबसे पहले, यह एक जवाब नहीं है, इतना एक नैदानिक दृष्टिकोण के रूप में।
यह किसी भी तरह से व्यापक नहीं है - या यहां तक कि कुछ भी करीब है, यह सिर्फ एक शुरुआती बिंदु है।
फर्स्ट बाइट का समय
पहली बाइट के समय (TTFB) में कई घटक होते हैं:
- DNS लुकअप: डोमेन का आईपी पता ढूंढें (संभावित सुधार: अधिक कई / वितरित / उत्तरदायी DNS सर्वर)
- कनेक्शन का समय: सर्वर के लिए एक सॉकेट खोलें, कनेक्शन पर बातचीत करें (विशिष्ट मूल्य 'पिंग' समय के आसपास होना चाहिए - एक गोल यात्रा आमतौर पर आवश्यक होती है - अनुवर्ती बाद के अनुरोधों के लिए मदद करनी चाहिए)
- प्रतीक्षा करना: पहले बाइट से पहले आवश्यक प्रारंभिक प्रसंस्करण भेजा जा सकता है (उसका वह स्थान है जहां आपका सुधार होना चाहिए - यह गतिशील सामग्री के लिए सबसे महत्वपूर्ण होगा।
जब आप ApacheBench आउटपुट को देखते हैं, तो आप यह भी देखते हैं:
- प्रसंस्करण: यह सामग्री के प्रतीक्षा (पूर्ण स्थानांतरण) का योग है (यदि हस्तांतरण का समय, डेटा की मात्रा को डाउनलोड करने की अपेक्षा से अधिक लंबा होगा, तो आगे की प्रक्रिया (पहले बाइट के बाद) प्राप्त हो रही है) (जैसे पृष्ठ है) उपलब्ध होने पर फ्लशिंग सामग्री)
घटकों की तुलना करना
कुछ अपवादों के साथ, आपकी समस्या बैकएंड प्रसंस्करण में झूठ बोलने वाली है, जो आमतौर पर अत्यधिक जटिल / अक्षम कोड, या खराब तरीके से कॉन्फ़िगर किए गए MySQL के लिए नीचे आती है।
इस समस्या से संपर्क करने का एक अच्छा तरीका तुलनाओं की एक श्रृंखला है जो आपके सेटअप के विभिन्न पहलुओं को समाप्त कर देगा। एक अच्छी तुलना को समस्या को कम करने में मदद करने के लिए यथासंभव स्थिर रखना चाहिए। वर्तमान में, आपने निम्नलिखित तुलनाएं प्रदान की हैं:
- पुराने सर्वर और नए सर्वर पर चल रही समान (क्लोन) साइट:
- अंतर: सर्वर
- परिणाम: पुराना सर्वर तेज है; नया सर्वर धीमा है
- नोट: आपको यहाँ क्या ज़रूरत है इन सर्वरों के बीच के अंतर को निर्धारित करने के लिए - दोनों का उपयोग किए गए स्टैक (Nginx, आदि) और हार्डवेयर के संदर्भ में (क्या यह अधिक शक्तिशाली मशीन है क्योंकि पुराना सर्वर तेजी से पुराना है?)
- निष्कर्ष: कोड सही सेटअप पर तेजी से चलने में सक्षम हो सकता है
- नए सर्वर पर टेस्ट साइट बनाम पूरी साइट
- अंतर: सामग्री, थीम, प्लगइन्स, आदि
- परिणाम: परीक्षण साइट तेज है, पूर्ण साइट धीमी है
- नोट्स: सिद्धांत रूप में, इस परीक्षण से आपको अपने सेटअप के कई पहलुओं - DNS, नेटवर्क, यहां तक कि आपके nginx / php / mysql सेटअप को खत्म करने में मदद मिल सकती है - हालाँकि, यह काफी 'उचित' नहीं है।
- निष्कर्ष: अतिरिक्त सामग्री प्रदर्शन पर महत्वपूर्ण प्रभाव डाल रही है
आदर्श परीक्षा में आपको अपनी पूरी साइट को डुप्लिकेट करना होगा, लेकिन फिर एक लेख और संबंधित टिप्पणियों को छोड़कर सभी सामग्री को हटा दें। इस परीक्षण का बिंदु निर्णायक रूप से यह निर्धारित करना होगा कि क्या बड़ी मात्रा में सामग्री समस्या है या यदि आपके सेटअप के अन्य पहलू (वर्डप्रेस प्लगइन्स, थीम, आदि) इसका कारण हैं। आप अनिवार्य रूप से समान साइटों के प्रदर्शन की तुलना एक ही (नए) सर्वर पर करेंगे - एक ही पृष्ठ (एक ही लंबाई, आदि) को लोड करना - केवल अंतर के साथ कुल साइट सामग्री (जैसे कि एक अच्छा मौका है कि कुछ प्लगइन नहीं है वृद्धि हुई सामग्री के साथ पैमाने पर अच्छी तरह से)।
कुछ भी बदले बिना, कुछ अन्य तुलनाएं हैं जो आप कर सकते हैं:
- एक दूरस्थ स्थान बनाम स्थानीय से परीक्षण - यह पहचानने में मदद करेगा कि क्या नेटवर्क, विलंबता, डीएनएस आदि का कारण है
- आपने पहले ही (कुछ हद तक) ऐसा कर लिया है और ज्यादातर यह निष्कर्ष निकाला है कि आपको नेटवर्क की समस्या नहीं है।
- वार्निश (यानी पोर्ट 80) बनाम नंगेक्स (पोर्ट 8080) के माध्यम से परीक्षण करें - परीक्षणों के बीच अपने कॉन्फ़िगरेशन को बदलने की कोशिश न करें - बस सही पोर्ट का उपयोग करें। यह आपको वार्निश के प्रभाव को दिखाएगा। चूंकि वार्निश एक कैशिंग परत है, इसलिए इसे पहले एक के बाद सभी अनुरोधों को जल्दी से पूरा करना चाहिए - अनिवार्य रूप से, इसे बैकएंड और प्रसंस्करण को बायपास करना चाहिए जो एक गतिशील पृष्ठ उत्पन्न करने के लिए आवश्यक है, और कैश्ड कॉपी की बहुत जल्दी सेवा करता है।
- आपने यह (हालांकि, स्थानीय रूप से नहीं) किया है और यह प्रदर्शित किया है कि वार्निश का आपके प्रदर्शन पर महत्वपूर्ण सकारात्मक प्रभाव है।
अपने बैकएंड को ट्यूनिंग
इस बिंदु तक आपको या तो समस्या का पता लगाना चाहिए या यह निष्कर्ष निकालना चाहिए कि यह आपके बैकएंड में निहित है। जो आपको Nginx, PHP, या MySQL छोड़ देता है।
(मैं यहाँ उल्लेख करना चाहिए, यह हमेशा करता है, तो अपने टोंटी सीपीयू, रैम, या मैं / हे है पता करने के लिए उपयोगी है कि - के बीच sar
, top
, iostat
, vmstat
, free
।, आदि आप इस पर कुछ निष्कर्ष पर आने के लिए सक्षम होना चाहिए)
nginx
Nginx केवल अनुरोध ले रहा है और या तो स्थिर सामग्री परोस रहा है या PHP-FPM के अनुरोधों को शिफ्ट कर रहा है - आमतौर पर एल्गिनएक्स के साथ अनुकूलन करने के लिए बहुत कुछ नहीं है।
- कार्यकर्ता = # सीपीयू कोर सेट करें
- सक्षम रखें (10-15 का मान अच्छा है)
- अनावश्यक लॉगिंग अक्षम करें
- जरूरत पड़ने पर बफर साइज बढ़ाएं
- यदि कथनों से बचें (जहाँ संभव हो, regexes के बजाय स्थिर नामों का उपयोग करें, अनावश्यक एक्सटेंशन को समाप्त करें)
आदर्श रूप से, आपके परीक्षण ब्लॉग और क्लोन किए गए ब्लॉग में समान कॉन्फ़िगरेशन हैं, इस मामले में, आपने समस्या के रूप में प्रभावी रूप से Nginx को समाप्त कर दिया है।
आवेदन
मामले में जहां आप अपने कोड में एक समस्या की पहचान करने की कोशिश कर रहे हैं (उदाहरण के लिए एक धीमी प्लगइन, आदि) धीमी लॉग शुरू करने के लिए जगह है।
- MySQL स्लो लॉग को सक्षम करें और PHP-FPM स्लो लॉग अपने बेंचमार्क को चलाएं और देखें कि क्या धीमा चल रहा है।
माई एसक्यूएल
- अपने कैश को बढ़ाएं और एक अच्छा प्रारंभिक बिंदु प्राप्त करने के लिए mysqltuner.pl चलाएं ।
पीएचपी
- अनावश्यक एक्सटेंशन अक्षम करें,
- अक्षम रजिस्टर_ग्लोबल्स, मैजिक_क्वाट्स_ *, एक्सपोज_फैप, रजिस्टर_रग_रग्व, हमेशा_पॉपलेट_राव_पोस्ट_डाटा
- memory_limit बढ़ाएं
- Open_basedir और safe_mode के महत्वपूर्ण प्रदर्शन निहितार्थ हैं, लेकिन रक्षा की एक अतिरिक्त परत भी प्रदान कर सकते हैं। परीक्षण और उनके बिना, यह निर्धारित करने के लिए कि प्रदर्शन पर उनका प्रभाव सहनीय है या नहीं।
पीएचपी-एफ पी एम
- दोपहर समायोजित करें। * मान - उच्च भार से निपटने के लिए उन्हें बढ़ाएं
यह ध्यान देने योग्य है कि आपके htop के परिणाम CPU-बल्क के उपभोग के रूप में php-fpm दिखाते हैं - और आपकी समस्या सीधे इस से संबंधित प्रतीत होती है।
कैशिंग
एक बार जब आप प्रत्येक संभावित अड़चन को अनुकूलित कर लेते हैं, तो कैशिंग शुरू करें।
- आपके पास पहले से ही एक opCode कैश (APC) है - यह सुनिश्चित करें कि यह काम कर रहा है (यह एक परीक्षण फ़ाइल के साथ आता है) - अपने कैश हिट दरों की जांच करें, और यदि संभव हो तो डिस्क के बजाय APC कैश को मेमोरी में रखें।
- अपने कोड को कैश पर सेट करें (उदाहरण के लिए वर्डप्रेस जैसे W3TC के लिए प्लगइन का उपयोग करके)
- Nginx के साथ आप FastCGI कैशिंग सेटअप कर सकते हैं - लेकिन जब से आपके पास वार्निश है, यह सबसे अच्छा बचा जाता है।
- एक कैशिंग लेयर सेट करें, जैसे वार्निश (जो आप पहले ही कर चुके हैं) - और यह सुनिश्चित करें कि यह काम कर रहा है (जैसे वार्निशस्ट का उपयोग करें, एक उच्च हिट्रेट प्राप्त करना पढ़ें )
- अपनी साइट के घटकों के लिए और अधिक कैशिंग जोड़ें - जैसे मेमकेच्ड यदि लागू हो
कभी-कभी, आपके एप्लिकेशन और हार्डवेयर की सीमाओं को देखते हुए, आप बैकएंड के प्रदर्शन को सुधारने में सक्षम नहीं हो सकते हैं - हालांकि, यह कैशिंग का बिंदु है - बैकेंड के उपयोग को कम करने के लिए।
आगे की पढाई
if -f
आपके उपयोग के निर्देश के साथ कुछ करना हो सकता हैlocation
। यहाँ जो मैं पढ़ रहा हूँ, उसके आधार पर wiki.nginx.org/Pitashes , मुझे लगता है कि-f
फ़ाइल के लिए एक अक्षम खोज कर रहा है, जिससे टाइम टू फ़र्स्ट बाइट का मुद्दा पैदा हो सकता है, खासकर अगर आपके पास बड़ी संख्या में निर्देशिकाएं हों फ़ाइलें।