मेरी साइट पर drush cc all
चलाने के लिए 4 मिनट से अधिक समय लगता है। साइट डीबी कुछ जीबी है। हालाँकि, मैं स्पष्ट कारण नहीं देख सकता कि यह बहुत लंबा क्यों है। बोतल की गर्दन का पता लगाने के लिए मैं क्या कर सकता हूं?
मेरी साइट पर drush cc all
चलाने के लिए 4 मिनट से अधिक समय लगता है। साइट डीबी कुछ जीबी है। हालाँकि, मैं स्पष्ट कारण नहीं देख सकता कि यह बहुत लंबा क्यों है। बोतल की गर्दन का पता लगाने के लिए मैं क्या कर सकता हूं?
जवाबों:
क्लीयरिंग कैश इट-सेल्फ को एक लंबा समय नहीं लगता है, क्योंकि यह सिर्फ कैश टेबल को छोटा कर रहा है। सबसे अधिक समय लगने के बाद कैश रजिस्ट्री का पुनर्निर्माण हो रहा है। आमतौर पर यह थीम रजिस्ट्री है जो सभी नए हुक और नए टेम्पलेट फ़ाइलों, सिस्टम के लिए स्कैनिंग करती है, जो नए मॉड्यूल और क्लास फाइलों के लिए फाइलों को स्कैन करती है, और इसी तरह।
आप निर्दिष्ट drush cc theme-registry
या किसी अन्य द्वारा विशिष्ट कैश को हमेशा साफ़ कर सकते हैं ।
यह अत्यधिक अनुशंसित है कि आप प्रसंस्करण को गति देने के लिए PHP कैशिंग तंत्र (जैसे OPCache, XCache, आदि) का उपयोग करते हैं। और मेमोरी-बेस कैश SQL टेबल पर भारी उपयोग को बदलने के लिए (जैसे मेम्केड या रेडिस), इसलिए कैश को साफ़ करने में कोई समय नहीं लगेगा, बस कैश को फ्लश करके (जैसे echo flush_all > /dev/tcp/127.0.0.1/11211
बैश में)।
वैकल्पिक रूप से आप हमेशा कैश को मैन्युअल रूप से साफ़ कर सकते हैं , जैसे:
echo "SHOW TABLES LIKE 'cache%'" | $(drush sql-connect) | tail -n +2 | xargs -L1 -I% echo "DELETE FROM %;" | $(drush sql-connect) -v
यह जानने के लिए कि विशेष रूप से सबसे अधिक समय क्या है, आपको इसे डीबग / प्रोफ़ाइल करने की आवश्यकता है (जैसे XDebug, XHProf, phpdbg, dtrace)।
OS X / Unix पर, इसे dtrace
(चलाने के बाद drush
) प्राप्त किया जा सकता है :
sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'
लिनक्स पर, उपयोग strace
, जैसे
strace -e trace=sendto,recvfrom -s1000 -p $(pgrep php)
कुछ विशिष्ट चीजों को देखने के लिए, उदाहरण के लिए जोड़ने का प्रयास करें strace ... 2>&1 | grep -C5 UPDATE
:।
यदि आपके पास वास्तव में एक बड़ा डेटाबेस है, और आपका सिस्टम ठीक चल रहा है जब आप कैश स्पष्ट नहीं कर रहे हैं, तो संभावना है कि आपके पास पूरी तरह से अपने सेटअप का समर्थन करने के लिए पर्याप्त मेमोरी नहीं है।
यदि आपकी साइट लिनक्स बॉक्स पर चल रही है, तो 'टॉप' (अपने शेल से) चलाएँ और उपयोग की गई मेमोरी द्वारा प्रक्रिया सूची को सॉर्ट करने के लिए शिफ्ट-एम दबाएं। फिर, अपने कैश-क्लियर ऑपरेशन को दूसरे टर्मिनल से चलाएं। आपको सूची में शीर्ष पर mysql और अपाचे को देखना चाहिए। आप देख सकते हैं कि इन प्रक्रियाओं में से प्रत्येक का कुल मेमोरी का कितना प्रतिशत उपयोग कर रहा है, और कितनी मुफ्त रैम का उपयोग किया जाता है। यदि आपके पास बड़ी मात्रा में वर्चुअल स्पेस है, लेकिन आपके सभी भौतिक रैम समाप्त हो गए हैं, तो यह ऑपरेशन वीएम मेमोरी को थ्रैश करने का कारण बन सकता है, जो आपके निष्पादन के समय को सामान्य रूप से जो भी हो, उसके एक छोटे से अंश तक ड्राइव कर सकता है।
एक बार, मैं एक बॉक्स w / out -quite- सेटअप का समर्थन करने के लिए पर्याप्त मेमोरी पर मध्य-ट्रैफिक ड्रुपल साइट चला रहा था। जब मैंने एक असंबंधित कम-ट्रैफ़िक साइट पर कैश-क्लियर चलाया, तो कैश के पुनर्निर्माण ने सिस्टम को उसकी सीमा से परे धकेल दिया, और सब कुछ बंद कर दिया। इसलिए, कुल सिस्टम व्यवहार यहां महत्वपूर्ण है; यही कारण है कि 'शीर्ष' जैसे सरल उपकरण शुरू करने के लिए एक आसान जगह है।
मैं यहाँ @ greg_1_anderson से असहमत (कुछ हद तक) जा रहा हूँ।
अगर सिस्टम पूरी तरह से क्रैश नहीं कर cc all
रहा है, तो मुझे नहीं लगता कि आपके पास सामान्य मेमोरी इश्यू है। जब कोई LAMP सर्वर मेमोरी से बाहर निकलता है, तो यह स्वैप को हिट करेगा। स्वैप को हिट करने वाला एक सक्रिय सर्वर खराब होने की आशंका पैदा करेगा। सिस्टम की सुस्ती (स्वैप एक सिस्टम को बहुत धीमी गति से चलाने के कारण) से http प्रक्रियाएँ शुरू हो जाएंगी, जिसके कारण अधिक स्वैप का उपयोग किया जाएगा, आदि साइटों पर जहां मैंने ऐसा होता देखा है, मैं देख रहा हूँ कि प्रक्रिया लोड 100 हिट है, और सक्रिय httpd प्रक्रियाओं का एक टन।
यदि आपका सिस्टम अंततः वापस आता है, तो मुझे लगता है कि आप खराब तरीके से तैयार हैं। drush cc all
डेटाबेस एक्सेस का एक बहुत परिणाम होगा, इसलिए मुझे लगता है कि यह समस्या अधिक दिखा रहा है। मेरा सुझाव साइट पर mysqltuner चलाने का होगा । यदि आपके पास एक मल्टी जीबी डेटाबेस है, तो मेरा अनुमान है कि आपका innodb_buffer_pool_size
दूरस्थ रूप से ठीक से आकार नहीं है, और आपका MySQL उदाहरण जोर दे रहा है। मैं डेटाबेस के पदचिह्न को छोटा रखने के लिए वैकल्पिक कैश बैकएंड की भी जांच करूंगा।
यह आपके वेब होस्टिंग वातावरण हो सकता है। क्या आप एक स्थानीय सेटअप, या साझा होस्टिंग या VPS / सर्वर पर कुछ होस्टिंग की बात कर रहे हैं?
max_execution_time
। आप drush php-eval "print ini_get('max_execution_time');"
हालांकि दोहरी जांच कर सकते हैं ।
यह एक पूर्ण समाधान नहीं है, आपके देरी के स्रोत की पहचान करने में मदद करने के लिए सिर्फ एक और उपकरण।
top
निगरानी प्रक्रियाओं का उपयोग करने के साथ-साथ , आपको mytop
सूचनात्मक का उत्पादन मिल सकता है । (अन्य उत्तर MySQL के ऊपर दिए गए हैं, लेकिन यदि आप किसी अन्य DB बैकएंड का उपयोग कर रहे हैं, तो आपको एक समतुल्य टूल के लिए mytop स्वैप करना होगा।)
mytop
बस MySQL SHOW FULL PROCESSLIST
को लूप में निष्पादित करता है , और आपको दिखाता है कि किस क्वेरी को निष्पादित किया जा रहा है (इसलिए जिसमें बहुत समय लगता है)। यदि कैश क्लियर इस या उस टेबल को साफ करने में लंबा समय ले रहा है, तो आप देखेंगे कि वास्तव में यहां क्या चीजें हैं। यदि आपके पास स्थापित करने के लिए पहुँच नहीं है mytop
, तो बस अपने शेल में एक कच्चा संस्करण करें -
while true; do mysql -e 'SHOW FULL PROCESSLIST' && sleep 5 && clear ; done
यदि देरी MySQL के प्रश्नों से उपजी नहीं है, तो यह उपकरण आपके लिए कम से कम पुष्टि कर सकता है।
मैंने पाया कि Drupal 7 पर स्पीड अप कैश क्लीयरिंग के नाम से एक ब्लॉग पोस्ट मिला , जो कि कैश क्लीयर प्रक्रिया के किस हिस्से को चीजों को धीमा कर रही थी, को ठीक करने में बहुत मददगार साबित हुई। यह समस्याएँ मॉड्यूल में पिनपॉइंट्स और इकाई एपीआई मॉड्यूल मेरी साइट को प्रभावित कर रही थीं, लेकिन पोस्ट में विस्तृत प्रक्रिया ने मुझे ड्रुपल कोर और ब्रेकपॉइंट मॉड्यूल में सामना कर रहे मुद्दों को ट्रैक करने में भी मदद की ।
प्रक्रिया के माध्यम से काम करने में कुछ समय लगता है, लेकिन इससे मुझे कैश क्लियर को कई मिनटों से एक मिनट से कम करने में मदद मिली है।