php - एपीसी प्रयोक्ता कैशे के लिए "कैश पूर्ण गिनती" क्यों बढ़ रहा है, भले ही इसमें बहुत मेमोरी उपलब्ध है?




drupal caching (2)

http://pecl.php.net/bugs/bug.php?id=13146 मुझे लगता है कि आपको वहां जारी रखना चाहिए या एक नया बग रिपोर्ट खोलना चाहिए।

मैंने कुछ समय के लिए इस के साथ खेला है, लेकिन मैं क्या करना है, इसके बारे में कुछ नुकसान हो रहा है। मैं PHP 5.2.5 के साथ CentOS 5 पर APC 3.1.3p1 का उपयोग कर रहा हूं। एपीसी ओपोड कैश और उपयोगकर्ता कैश दोनों के रूप में काम कर रहा है। अधिकतर यह सर्वर एपीसी कैश समर्थन के लिए कैशराउटर मॉड्यूल का उपयोग करके डॉप्ल 6 साइट चलाता है। मैं थोड़ी देर के लिए एपीसी 3.0.19 चला रहा था, लेकिन यह अपाचे को कभी-कभी (एपीसी के उस संस्करण में एक प्रलेखित बग) को लॉक कर रहा था, यही कारण है कि मैं 3.1.3p1 पर हूं।

मैंने एपीसी को 512 MBytes स्मृति (मिमीप) के लिए कॉन्फ़िगर किया है I

लक्षण थोड़ा आंतरायिक हैं लेकिन खाली कैश से शुरू होता है यह आम तौर पर मैं क्या देखता हूं:

  • उपयोगकर्ता कैश में धीरे धीरे भरता है 20,000 आवेषण / सेकंड जैसी कुछ की आरंभिक प्रविष्टि दर के बावजूद, उपयोगकर्ता कैश केवल कुछ सौ की सूचना देगा, फिर कुछ हज़ार प्रविष्टियां, और बहुत धीरे-धीरे बढ़ेगी मैं इसे लिखने के लिए संभावित रूप से विशेषता देता हूं, लेकिन समस्या को सुलझाने के मामले में यह उल्लेख करना चाहता हूं। कई घंटों के बाद यह लगभग 30k प्रविष्टियों के एक संतुलन को हिट करता है।

  • विखंडन जल्दी में सेट और जल्दी से बढ़ता है शायद 10 घंटे या तो मैं आमतौर पर 100% विखंडन पर होता है।

  • कुल मिलाकर (opcode + उपयोगकर्ता) कैश उपयोग लगभग 240 एमबी या तो स्थिर है यह वास्तव में उस स्तर से आगे नहीं बढ़ेगा एक दिन बाद या तो मैं उपयोगकर्ता कैश कैश पूर्ण गणना (यूसीसीसी) बढ़ते देखना शुरू कर दूँगा।

इस समय मेरे यूसीसीसी लेखन में 62358 और एपीसी रिपोर्टिंग 280 एमबी मुफ्त के बावजूद बढ़ रहा है। मेरे पास 7200 का यूज़र _ टीटीएल है, लेकिन मैंने इसे 0 या अन्य मात्रा में सेट करने के साथ खेला है और इस समस्या पर इसका कोई असर नहीं है।

मुझे संदेह है कि इस समस्या में विखंडन के साथ कुछ करना है अभी मेरा सर्वर "फ्रेग्मेंटेशन: 100.00% (24740 टुकड़ों में 280.0 MBytes से 280.0 MBytes) रिपोर्टिंग कर रहा है" और 280 MB बस रिक्त स्थान की एपीसी की रिपोर्टिंग की मात्रा होती है; एक संयोग से, मुझे लगता है दुर्भाग्य से, मुझे डॉक्स या अन्य जगहों में अनमोल कम जानकारी मिली है, यह संकेत करने के लिए कि एपीसी की दुनिया में वास्तव में "विखंडन" वास्तव में क्या मतलब है, और ऐसा लगता है कि आप इसे से बचने के लिए कुछ भी नहीं कर सकते।

क्या कोई इस समस्या पर कोई प्रकाश डाला सकता है?


एपीसी निम्नलिखित सूत्र का उपयोग करके विखंडन प्रतिशत की गणना करता है:

(total_size_of_free_blocks_lt_5M / total_size_of_all_free_blocks) * 100

* ध्यान दें कि यह केवल 5M से छोटा खंडन के रूप में चिह्नित करता है।

मैं अपने विशिष्ट मामले को सादे अंग्रेजी में अनुवाद करूंगा:

फ्रेग्मेंटेशन: 100.00% (24740 टुकड़ों में 280.0 MBytes के 280.0 MBytes)

इसका मतलब है कि आपके मुफ्त ब्लॉकों में से 280 एम के सभी 5 एम से कम हैं यदि आप अपने रिक्त स्थान को टुकड़ों की संख्या से विभाजित करते हैं तो आप देखेंगे कि यह 11.6 के औसत टुकड़ा आकार के बराबर है।

इसका मतलब यह है कि यदि आप एक आइटम को संग्रहित करने का प्रयास करते हैं जो सभी उपलब्ध ब्लॉकों से बड़ा है, तो यह फिट नहीं होगा, और दो। में से एक हो जाएगा, apc.user_ttl कॉन्फ़िगरेशन सेटिंग के आधार पर। यदि टीटीएल को 0 पर सेट किया गया है, तो आपका संपूर्ण उपयोगकर्ता कैश फ्लश कर दिया गया है और आइटम डाला गया है। यदि टीटीएल को 0 से ज्यादा सेट किया गया है, तो यह समाप्त होने वाली प्रविष्टियों को फ्लश करेगा और आइटम डालें। इन दोनों मामलों में कैश पूरी गिनती बढ़ जाती है। जितना यह आपके मामले में है, उतना जितना अधिक हो, यह एक संकेतक है कि आप इसे गलत कर रहे हैं

समय के साथ आपके कैश में विखंडन क्या कर रहा है यह सरल दृश्य है। यह एक साधारण 32 बाइट कैश आकार का प्रतिनिधित्व करता है, प्रत्येक ब्लॉक 1 बी है

[--------------------------------] (starts empty)
[A-------------------------------] (1B stored)
[ABB-----------------------------] (2B stored)
[ABBCCCC-------------------------] (4B stored)
... (time elapses)
[A--CCCC-EEE--GGGGGG-III--KKKLLLL]

तो अब अगर आप आइटम M को संग्रहित करना चाहते हैं, जो आकार 4 बी है, तो आप ऐसा नहीं कर सकते, क्योंकि सबसे बड़ा उपलब्ध ब्लॉक 2 बी है इससे एक कैश पूर्ण गणना बढ़ जाती है, और user_ttl के आधार पर एक पूर्ण या आंशिक फ्लश ने विस्तार से विस्तार से बताया

अब सवाल यह है: क्या आपके मामले में यह बुरा है?

मुझे लगता है कि यह हो सकता है 100% कैश विखंडन और खुद में बुरा नहीं है यह देखने के लिए असामान्य नहीं है कि किसी भी प्रोडक्शन सर्वर पर चल रहा है। हालांकि, यह बहुत खाली स्थान के साथ 100% पर देखने के लिए यह संकेत है कि कुछ गलत हो सकता है

  • आप बहुत ज्यादा कैशिंग कर सकते हैं; सिर्फ इसलिए कि कैश का मतलब यह नहीं है कि आपको इसमें सब कुछ ढंकना चाहिए।
  • आप एक टीटीएल (एंट्री के लिए) से बहुत कम कैशिंग कर सकते हैं, कम टीटीएल का मतलब है कि गैर-मुक्त ब्लॉकों को अधिक बार मुक्त किया जा रहा है।
  • यह भी संभव है कि आपके पास बहुत बड़ी चीज़ें हैं जो आप स्टोर करने का प्रयास कर रहे हैं। 100% विखंडन पर यह गारंटी है कि कोई आइटम> = 5 एम फिट नहीं होगा आपके औसत 11.6 के मुफ्त ब्लॉक आकार के साथ यह अधिक संभावना है कि एक वस्तु दी जाएगी जो कि आकार 11.6K से बढ़ेगी।

आप अपने यूजर कैश को साइज से सॉर्ट करके देख सकते हैं कि आपकी सबसे बड़ी प्रविष्टियां क्या हैं, और उनके टीटीएल क्या हैं। शायद उन्हें बढ़ाया जा सकता है?

आपके आवेदन (यों) और उपयोग के पैटर्न में कोहनी न होकर सटीक निदान देने के लिए वास्तव में संभव नहीं है, लेकिन यह सारी जानकारी आपको सही रास्ते पर सेट करनी चाहिए। यह काफी संभव है कि यह एक गैर-मुद्दा है और आप एपीसी को चुपचाप काम कर सकते हैं।





apc