`drc cc all` कमांड में बहुत लंबा समय लगता है, मैं क्या कर सकता हूं?


12

मेरी साइट पर drush cc allचलाने के लिए 4 मिनट से अधिक समय लगता है। साइट डीबी कुछ जीबी है। हालाँकि, मैं स्पष्ट कारण नहीं देख सकता कि यह बहुत लंबा क्यों है। बोतल की गर्दन का पता लगाने के लिए मैं क्या कर सकता हूं?


पहले mysql क्वेरी लॉग की जाँच करें: drupal.stackexchange.com/questions/75629/…
AgA

क्या आपके पास क्रोन चल रहा है?
mpdonadio

हां मेरे पास एक क्रोन चल रहा है। साइट सामान्य रूप से धीमी है। इतने सारे विरासत कोड जो फिर से फैक्टरिंग के लायक नहीं हैं।
शाम

मैं यहाँ @MPD से सहमत हूँ, मुझे नहीं लगता कि यह मेमोरी से संबंधित है। MySQL भी संभावित कारणों में से सिर्फ एक है। इसका पता लगाने का केवल एक ही तरीका है और वह है इसे प्रोफाइल करना। सबसे आसान तरीका जो xhprof एक्सटेंशन और डेवेल का उपयोग कर रहा है, वह भी ड्रश के साथ काम करता है (रिपोर्ट का लिंक देखने के लिए -d)। मेरा अनुमान है कि कई समस्याएं हैं, एक विशिष्ट समस्या यदि साइट सभी अनुरोधों के लिए धीमा है, तो अनुपलब्ध मॉड्यूल हैं, drupal.stackexchange.com/questions/724/why-is-drupal-7-so-nlow देखें । दृश्य में कैश के साथ कुछ प्रमुख प्रदर्शन मुद्दे भी हैं, drupal.org/node/1944674 देखें ।
बेरीदिर

धन्यवाद, मुझे लगा कि मुझे प्रोफाइलिंग करनी है, लेकिन ड्रुपल कोड बेस के मामले में, अड़चन को इंगित करना हमेशा कठिन होता है। हालाँकि मैंने कहा था कि साइट धीमी है, यह बहुत धीमी नहीं है और सभी सीसी को ड्रोस करती है, यह गैर-कानूनी रूप से धीमा है।
17

जवाबों:


6

क्लीयरिंग कैश इट-सेल्फ को एक लंबा समय नहीं लगता है, क्योंकि यह सिर्फ कैश टेबल को छोटा कर रहा है। सबसे अधिक समय लगने के बाद कैश रजिस्ट्री का पुनर्निर्माण हो रहा है। आमतौर पर यह थीम रजिस्ट्री है जो सभी नए हुक और नए टेम्पलेट फ़ाइलों, सिस्टम के लिए स्कैनिंग करती है, जो नए मॉड्यूल और क्लास फाइलों के लिए फाइलों को स्कैन करती है, और इसी तरह।

आप निर्दिष्ट 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:।


5

यदि आपके पास वास्तव में एक बड़ा डेटाबेस है, और आपका सिस्टम ठीक चल रहा है जब आप कैश स्पष्ट नहीं कर रहे हैं, तो संभावना है कि आपके पास पूरी तरह से अपने सेटअप का समर्थन करने के लिए पर्याप्त मेमोरी नहीं है।

यदि आपकी साइट लिनक्स बॉक्स पर चल रही है, तो 'टॉप' (अपने शेल से) चलाएँ और उपयोग की गई मेमोरी द्वारा प्रक्रिया सूची को सॉर्ट करने के लिए शिफ्ट-एम दबाएं। फिर, अपने कैश-क्लियर ऑपरेशन को दूसरे टर्मिनल से चलाएं। आपको सूची में शीर्ष पर mysql और अपाचे को देखना चाहिए। आप देख सकते हैं कि इन प्रक्रियाओं में से प्रत्येक का कुल मेमोरी का कितना प्रतिशत उपयोग कर रहा है, और कितनी मुफ्त रैम का उपयोग किया जाता है। यदि आपके पास बड़ी मात्रा में वर्चुअल स्पेस है, लेकिन आपके सभी भौतिक रैम समाप्त हो गए हैं, तो यह ऑपरेशन वीएम मेमोरी को थ्रैश करने का कारण बन सकता है, जो आपके निष्पादन के समय को सामान्य रूप से जो भी हो, उसके एक छोटे से अंश तक ड्राइव कर सकता है।

एक बार, मैं एक बॉक्स w / out -quite- सेटअप का समर्थन करने के लिए पर्याप्त मेमोरी पर मध्य-ट्रैफिक ड्रुपल साइट चला रहा था। जब मैंने एक असंबंधित कम-ट्रैफ़िक साइट पर कैश-क्लियर चलाया, तो कैश के पुनर्निर्माण ने सिस्टम को उसकी सीमा से परे धकेल दिया, और सब कुछ बंद कर दिया। इसलिए, कुल सिस्टम व्यवहार यहां महत्वपूर्ण है; यही कारण है कि 'शीर्ष' जैसे सरल उपकरण शुरू करने के लिए एक आसान जगह है।


धन्यवाद, मुझे लगता है कि अंतर्निहित कारण यह है कि साइट थोड़ी देर के लिए आसपास रही है, डीबी थोड़ी बड़ी है और कोड को बहुत अच्छी तरह से पुनः फैक्टरिंग की आवश्यकता है। उदाहरण के लिए, एक node_delete ऑपरेशन में लगभग 3 सेकंड लगते हैं। मुझे लगता है कि बहुत अधिक स्मृति देना निरर्थक हो सकता है, क्या आप सहमत हैं?
शाम

मेरे पास इसकी मशीन है और यह धीमी भी है। मैंने मेमोरी को दोगुना कर दिया है, 1GB तक और यह समय `drush cc all`। ज्यादा बेहतर नहीं केवल 4 जी तेज हो गया।
शाम

1
हाँ, यदि पूरी साइट बहुत सारी मेमोरी के साथ भी धीमी है, तो cc समस्या नहीं है; आपको अधिक सामान्य प्रोफाइलिंग करनी होगी।
greg_1_anderson

इसके अलावा, यदि साइट वास्तव में पुरानी है और ताज़ा करने की आवश्यकता है, तो ताज़ा मॉड्यूल के साथ खरोंच से पुनर्निर्माण पर विचार करें, और अपनी सामग्री को स्थानांतरित करने के लिए ड्रुपल -टू-ड्रुपल माइग्रेशन ( drupal.org/project/migrate_d2d ) का उपयोग करें।
greg_1_anderson

2

मैं यहाँ @ greg_1_anderson से असहमत (कुछ हद तक) जा रहा हूँ।

अगर सिस्टम पूरी तरह से क्रैश नहीं कर cc allरहा है, तो मुझे नहीं लगता कि आपके पास सामान्य मेमोरी इश्यू है। जब कोई LAMP सर्वर मेमोरी से बाहर निकलता है, तो यह स्वैप को हिट करेगा। स्वैप को हिट करने वाला एक सक्रिय सर्वर खराब होने की आशंका पैदा करेगा। सिस्टम की सुस्ती (स्वैप एक सिस्टम को बहुत धीमी गति से चलाने के कारण) से http प्रक्रियाएँ शुरू हो जाएंगी, जिसके कारण अधिक स्वैप का उपयोग किया जाएगा, आदि साइटों पर जहां मैंने ऐसा होता देखा है, मैं देख रहा हूँ कि प्रक्रिया लोड 100 हिट है, और सक्रिय httpd प्रक्रियाओं का एक टन।

यदि आपका सिस्टम अंततः वापस आता है, तो मुझे लगता है कि आप खराब तरीके से तैयार हैं। drush cc allडेटाबेस एक्सेस का एक बहुत परिणाम होगा, इसलिए मुझे लगता है कि यह समस्या अधिक दिखा रहा है। मेरा सुझाव साइट पर mysqltuner चलाने का होगा । यदि आपके पास एक मल्टी जीबी डेटाबेस है, तो मेरा अनुमान है कि आपका innodb_buffer_pool_sizeदूरस्थ रूप से ठीक से आकार नहीं है, और आपका MySQL उदाहरण जोर दे रहा है। मैं डेटाबेस के पदचिह्न को छोटा रखने के लिए वैकल्पिक कैश बैकएंड की भी जांच करूंगा।


धन्यवाद, ड्रुपल का उपयोग केवल संपादकीय उपयोग के लिए किया जाता है जिसमें एक सर्विकी परत होती है जिसमें वार्निश इन्फर्नट होता है। उपयोगकर्ताओं को अब ड्रुपल मिलता है। मैं सिर्फ जांच करना चाहता हूं कि क्या हो रहा है क्योंकि मुझे लगता है कि अड़चन है। मुझे लगता है कि मेरा सबसे अच्छा दांव mysql धीमा लॉग चालू करना और db की निगरानी करना है। और फिर xdebug के साथ कुछ प्रोफाइलिंग करते हैं
21

SHOW FULL PROCESSLIST आपको बताएगा कि धीमी क्वेरी लॉग (और इसलिए सर्वर रीस्टार्ट के बिना) का उपयोग करने की आवश्यकता के बिना क्या हो रहा है। Mytop के लिए अन्य जवाब भी देखें।
क्रिस बर्गेस

1

यह आपके वेब होस्टिंग वातावरण हो सकता है। क्या आप एक स्थानीय सेटअप, या साझा होस्टिंग या VPS / सर्वर पर कुछ होस्टिंग की बात कर रहे हैं?

  • होस्टिंग वातावरण - यदि आप साझा वेब होस्टिंग पर हैं, तो ड्रुपल / ड्रश की मात्रा का उपयोग सीमित हो सकता है: https://drupal.org/node/207036
  • अधिकतम निष्पादन समय - बढ़ाने की आवश्यकता है

ड्रश सामान्य रूप से सीमित नहीं है max_execution_time। आप drush php-eval "print ini_get('max_execution_time');"हालांकि दोहरी जांच कर सकते हैं ।
mpdonadio

1

यह एक पूर्ण समाधान नहीं है, आपके देरी के स्रोत की पहचान करने में मदद करने के लिए सिर्फ एक और उपकरण।

topनिगरानी प्रक्रियाओं का उपयोग करने के साथ-साथ , आपको mytopसूचनात्मक का उत्पादन मिल सकता है । (अन्य उत्तर MySQL के ऊपर दिए गए हैं, लेकिन यदि आप किसी अन्य DB बैकएंड का उपयोग कर रहे हैं, तो आपको एक समतुल्य टूल के लिए mytop स्वैप करना होगा।)

mytopबस MySQL SHOW FULL PROCESSLISTको लूप में निष्पादित करता है , और आपको दिखाता है कि किस क्वेरी को निष्पादित किया जा रहा है (इसलिए जिसमें बहुत समय लगता है)। यदि कैश क्लियर इस या उस टेबल को साफ करने में लंबा समय ले रहा है, तो आप देखेंगे कि वास्तव में यहां क्या चीजें हैं। यदि आपके पास स्थापित करने के लिए पहुँच नहीं है mytop, तो बस अपने शेल में एक कच्चा संस्करण करें -

while true; do mysql -e 'SHOW FULL PROCESSLIST' && sleep 5 && clear ; done

यदि देरी MySQL के प्रश्नों से उपजी नहीं है, तो यह उपकरण आपके लिए कम से कम पुष्टि कर सकता है।


1

मैंने पाया कि Drupal 7 पर स्पीड अप कैश क्लीयरिंग के नाम से एक ब्लॉग पोस्ट मिला , जो कि कैश क्लीयर प्रक्रिया के किस हिस्से को चीजों को धीमा कर रही थी, को ठीक करने में बहुत मददगार साबित हुई। यह समस्याएँ मॉड्यूल में पिनपॉइंट्स और इकाई एपीआई मॉड्यूल मेरी साइट को प्रभावित कर रही थीं, लेकिन पोस्ट में विस्तृत प्रक्रिया ने मुझे ड्रुपल कोर और ब्रेकपॉइंट मॉड्यूल में सामना कर रहे मुद्दों को ट्रैक करने में भी मदद की ।

प्रक्रिया के माध्यम से काम करने में कुछ समय लगता है, लेकिन इससे मुझे कैश क्लियर को कई मिनटों से एक मिनट से कम करने में मदद मिली है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.