मेरे ड्रुपल 7 साइटों में से एक में हजारों फ़ील्ड हैं, सामग्री प्रकारों का एक समूह, 25 से अधिक दृश्य, और सैकड़ों (जल्द ही हजारों) प्रोफ़ाइल प्रकार के। इस वजह से, मैं एक कोर पैच का उपयोग कर रहा हूं जो बेहतर कैश एंट्री फ़ील्ड जानकारी (http://drupal.org/node/1040790), और व्यू का -dev संस्करण है जो डिस्प्ले द्वारा बेहतर कैश व्यू देता है (एक बड़ा होने के बजाय) इसमें सभी दृश्य डेटा के साथ कैश पंक्ति देखें)।
इसने 160 एमबी + के बजाय 20-30 एमबी रैम के साथ लोड करने के लिए साइट पर अधिकांश पृष्ठों की मदद की है, (10MB + फ़ील्ड और विचारों के लिए कैश_ * तालिका पंक्तियों को खींचने के बजाय, पैच कैश_ * डेटा को अधिक कुशल रखने में मदद करते हैं)।
यह एक समस्या पेश करता है, हालांकि, उस कैश रीबिल्ड्स में वास्तव में लंबा समय लगता है । आमतौर पर एक या दो मिनट से ज्यादा। और इस समय के दौरान, ड्रुपल बस किसी भी पेज को लोड नहीं करेगा (क्योंकि यह जिस कैश से पढ़ने की कोशिश कर रहा है वह अभी तक निर्मित नहीं है, अन्य अनुरोधों को इंतजार करना होगा)।
कम-यातायात चक्रों के दौरान, यह कोई बड़ी बात नहीं है; सौ या तो उपयोगकर्ताओं को पृष्ठ लोड होने से पहले एक मिनट इंतजार करना होगा। लेकिन उच्च-ट्रैफ़िक चक्रों के दौरान, अपाचे सर्वर पागल हो जाता है, 40+ सीपीयू लोड के साथ, और मेमोरी जल्दी से भर जाती है क्योंकि सभी वर्कर थ्रेड प्रतीक्षा करते हैं, और अपनी मेमोरी को अधिकतम करते हैं, जिससे स्वैपिंग होती है। यह एक तरह से मौत का सर्पिल है। Httpd को फिर से शुरू करने से चीजें साफ हो जाएंगी, लेकिन चीजों को वापस सामान्य होने में 5-10 मिनट लगते हैं।
मेरा लक्ष्य इसे बनाना है ताकि कैश क्लियर हो जाए ताकि साइट अपने घुटनों पर न आए। एक के लिए, यदि मैं admin_menu के व्यक्तिगत कैश क्लियरिंग फ़ंक्शंस (जैसे "CSS और JS" का उपयोग करता हूं, तो "मेनू", फिर "थीम रजिस्ट्री" इत्यादि), चीजें तब तक सुचारू रूप से चलती हैं जब तक कि मैं "पेज और अन्य" विकल्प को हिट नहीं करता। जब दृश्य 'कैश' रीसेट हो जाता है (बहुत सीपीयू और डेटाबेस-गहन ऑपरेशन, जिसमें कैश की आवश्यकता होती है) की संख्या के साथ, और जब फ़ील्ड जानकारी कैश रीसेट हो जाता है (जो इस साइट पर सीपीयू और डेटाबेस-तीव्र भी है)।
तो ... मेरे प्रश्न / विचार:
- ड्रश और / या अन्य शेल स्क्रिप्टिंग का उपयोग करना, क्या मेरे लिए "एक बार में सभी कैश ब्लास्ट, और एक साफ पुनर्निर्माण के लिए आशा" की तुलना में अधिक बुद्धिमान तरीके से कैश को साफ करना संभव है?
- क्या मैं HTTP अनुरोधों को ब्लॉक कर सकता हूं जबकि कैश समाशोधन हो रहा है इसलिए कैश कैश-स्टैम्पिंग अनुरोधों के झुंड के साथ अपाचे नहीं मिलता है?
- अगर मैं Drupal / सामान्य httpd अनुरोध के बाहर कैश साफ़ कर सकता हूं, तो मैं निश्चित रूप से कैश क्लियर ऑपरेशन के लिए एक उच्च PHP मैमोरी_लिमिट सेट कर सकता हूं, और अपने यूनिवर्सल मैमोरी_लिमिट (अभी 256MB पर सेट है) के मामले में, व्यक्तिगत httpd थ्रेड को कैश साफ़ करने की आवश्यकता है ...)।
मूल रूप से: क्या यूआई में बटन क्लिक करने या उपयोग करने के अलावा ड्रुपल के साथ सभी कैश को साफ करने का कोई बुद्धिमान और सुंदर तरीका है drush cc all
?
[ स्पष्टीकरण के लिए संपादित करें : मेरे पास मुख्य समस्या कैश रीबिल्ड्स है , जो (ए) थोड़ी देर लेते हैं, और (बी) सभी अन्य अनुरोधों को तब तक रोकते हैं जब तक कि रिकॉड्स पूरा नहीं हो जाते। मैं इसे बनाने का एक तरीका खोजना चाहता हूं ताकि उच्च-यातायात समय के दौरान यह बहुत ही घातक न हो।]