इलास्टीचे रेडिस पर स्वैप से परहेज


14

हम अपने ElastiCache Redis उदाहरण की अदला-बदली से परेशान चल रहे हैं। अमेज़ॅन को लगता है कि जगह में कुछ कच्चे आंतरिक निगरानी है जो नोटिस का उपयोग करते हुए स्वैप करते हैं और बस ElastiCache उदाहरण को पुनः आरंभ करते हैं (जिससे हमारे सभी कैश्ड आइटम खो जाते हैं)। यहाँ पिछले 14 दिनों के लिए ElastiCache उदाहरण पर बाइट्सयूर्डफ़ॉर्चेचे (नीली रेखा) और स्वैपूज (नारंगी रेखा) का चार्ट दिया गया है:

Redis ElastiCache बाइट्सउपयोग किए गएफार्च और स्वैप

आप हमारे ElastiCache उदाहरण के रीबूट्स को ट्रिगर करने के लिए बढ़ते स्वैप उपयोग के पैटर्न को देख सकते हैं, जिसमें हम अपने सभी कैश्ड आइटम खो देते हैं (बाइट्सएफ़रफ़ॉर्चे ड्रॉप 0 पर)।

हमारे ElastiCache डैशबोर्ड के 'कैश ईवेंट्स' टैब में संबंधित प्रविष्टियाँ हैं:

सोर्स आईडी | प्रकार | दिनांक | प्रतिस्पर्धा

कैश-इंस्टेंस-आईडी | कैश-क्लस्टर | Tue Sep 22 07:34:47 GMT-400 2015 | कैश नोड 0001 पुनः आरंभ किया गया

कैश-इंस्टेंस-आईडी | कैश-क्लस्टर | Tue Sep 22 07:34:42 GMT-400 2015 | नोड 0001 पर कैश इंजन को पुनरारंभ करने में त्रुटि

कैश-इंस्टेंस-आईडी | कैश-क्लस्टर | Sun Sep 20 11:13:05 GMT-400 2015 | कैश नोड 0001 पुनः आरंभ किया गया

कैश-इंस्टेंस-आईडी | कैश-क्लस्टर | थू सिप 17 17:59:5950 GMT-400 2015 | कैश नोड 0001 पुनः आरंभ किया गया

कैश-इंस्टेंस-आईडी | कैश-क्लस्टर | बुध सितम्बर 16 10:36:52 GMT-400 2015 | कैश नोड 0001 पुनः आरंभ किया गया

कैश-इंस्टेंस-आईडी | कैश-क्लस्टर | Tue Sep 15 05:02:35 GMT-400 2015 | कैश नोड 0001 पुनः आरंभ किया गया

(स्निप पहले की प्रविष्टियाँ)

अमेज़न का दावा :

स्वैगेज - सामान्य उपयोग में, न तो मेमेकैच्ड और न ही रेडिस को स्वैप प्रदर्शन करना चाहिए

हमारी प्रासंगिक (गैर-डिफ़ॉल्ट) सेटिंग्स:

  • उदाहरण के प्रकार: cache.r3.2xlarge
  • maxmemory-policy: allkeys-lru (हम पहले से ज्यादा अंतर के बिना डिफ़ॉल्ट वाष्पशील-lru का उपयोग कर रहे थे)
  • maxmemory-samples: १०
  • reserved-memory: 2500000000
  • उदाहरण पर INFO कमांड को चेक करते हुए, मैं mem_fragmentation_ratio1.00 और 1.05 के बीच देखता हूं

हमने AWS समर्थन से संपर्क किया है और इसे बहुत उपयोगी सलाह नहीं मिली है: उन्होंने आरक्षित-मेमोरी को अधिक क्रैंक करने का सुझाव दिया है (डिफ़ॉल्ट 0 है, और हमारे पास 2.5 जीबी आरक्षित है)। इस कैश उदाहरण के लिए हमारे पास प्रतिकृति या स्नैपशॉट नहीं हैं, इसलिए मेरा मानना ​​है कि कोई भी BGSAVE नहीं होना चाहिए और अतिरिक्त मेमोरी का उपयोग करना चाहिए।

maxmemoryकैशे .r3.2xlarge की टोपी 62495129600 बाइट्स है, और यद्यपि हम अपनी टोपी (माइनस आवर reserved-memory) को जल्दी से मारते हैं , यह मुझे अजीब लगता है कि मेजबान ऑपरेटिंग सिस्टम को यहां बहुत स्वैप का उपयोग करने के लिए दबाव महसूस होगा, और इतनी जल्दी, जब तक कि अमेज़ॅन ने किसी कारण के लिए ओएस स्वैपीनेस सेटिंग्स को क्रैंक किया है। किसी भी विचार क्यों हम ElastiCache / Redis, या वर्कअराउंड हम कोशिश कर सकते हैं पर इतना स्वैप उपयोग का कारण होगा?

जवाबों:


7

चूंकि किसी और के पास यहां कोई जवाब नहीं था, इसलिए सोचा कि मैं केवल उसी चीज को साझा करूंगा जो हमारे लिए काम करती है। सबसे पहले, इन विचारों से काम नहीं हुआ :

  • बड़ा कैश इंस्टेंस प्रकार: कैश की तुलना में छोटे इंस्टेंस पर समान समस्या हो रही थी। अब हम उपयोग कर रहे हैं
  • फेरबदल maxmemory-policy: न तो अस्थिर-LRU और न ही allkeys-LRU कोई फर्क लग रहा था
  • टकरा रहा है maxmemory-samples
  • टकरा रहा है reserved-memory
  • सभी ग्राहकों को एक समाप्ति समय निर्धारित करने के लिए मजबूर करना, आम तौर पर अधिकतम 24 घंटों में कुछ दुर्लभ कॉलर्स के साथ 7 दिनों तक की अनुमति होती है, लेकिन अधिकांश कॉलर्स 1-6 घंटे की समाप्ति समय का उपयोग करते हैं।

यहाँ आखिर में क्या मदद मिली, बहुत कुछ: हर बारह घंटे में एक नौकरी चलाना जो 10,000 की चंक्स ( ) में सभी कुंजियों पर एक SCAN चलाता है COUNT। यहाँ पर उसी उदाहरण का बाइट्सयूएफ़र्डफ़ॉरच है, अभी भी पहले की तुलना में भारी उपयोग के तहत एक कैश .r3.2xlarge उदाहरण, पहले जैसी ही सेटिंग्स के साथ:

BytesUsedForCache

मेमोरी उपयोग में चूल्हा गिरना क्रॉन जॉब के समय के अनुरूप है। इस दो सप्ताह की अवधि में हमारे स्वैप का उपयोग ~ 45 एमबी से ऊपर हो गया है (पुनः आरंभ होने से पहले ~ 5 जीबी से ऊपर)। और ElastiCache में कैश इवेंट टैब कोई और कैश रीस्टार्ट ईवेंट की रिपोर्ट नहीं करता है।

हां, यह एक कीचड़ की तरह लगता है जो उपयोगकर्ताओं को स्वयं नहीं करना चाहिए, और यह कि रेडिस को बहुत स्मार्ट होना चाहिए ताकि वह स्वयं इस सफाई को संभाल सके। तो यह काम क्यों करता है? ठीक है, Redis GETs के दौरान समय-समय पर कुंजियों के निष्कासन पर निर्भर होने के बजाय, समय-सीमा की चाबियों की अधिक या कोई पूर्व- खाली सफाई नहीं करता है । या, यदि Redis को पता चलता है कि मेमोरी पूर्ण है, तो यह प्रत्येक नए SET के लिए कुंजियाँ निकालना शुरू कर देगा, लेकिन मेरा सिद्धांत यह है कि उस समय Redis पहले से ही hosed है।


जोश, बस अगर आप इस मुद्दे पर काम करने पर कोई और प्रगति थी सोच रहा था? हम एक समान स्थिति में चल रहे हैं। क्या आप अभी भी पहले की तरह ही समाधान का उपयोग कर रहे हैं?
एंड्रयू सी

@AndrewC हमारे पास अभी भी यही कैश उदाहरण है जो SCANs के समान समान व्यवहार के साथ घूम रहे हैं, और पिछले 3 महीनों में कुछ सुस्त स्वैग उपयोग स्पाइक्स - प्रश्न के रूप में कहीं भी बुरा नहीं है, मुख्य रूप से ऑफलोडिंग के कारण इस उदाहरण से दूर गतिविधि, और SCANजवाब में काम अभी भी सफाई को उत्तेजित करता है। AWS अब Redis Cluster फीचर पेश करता है, जो मुझे लगता है कि भारी उपयोग के लिए मदद करेगा।
जोश कुपर्शमीद

सुन कर अच्छा लगा; कैश कैश लोड को अलग कैश में लोड करने के लिए हमने एक समान तरीका अपनाया। क्लस्टरिंग को स्वैप उपयोग को कम करने में मदद करने पर आपकी परिकल्पना क्या है? बस समग्र भार को कम करके?
एंड्रयू सी

@JoshKupershmidt मेरे हीरो।
मोरियार्टी

1

मुझे पता है कि यह पुराना हो सकता है लेकिन मैं इस में aws प्रलेखन भाग गया।

https://aws.amazon.com/elasticache/pricing/ वे बताते हैं कि r3.2xlarge में 58.2gb मेमोरी होती है।

https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/ParameterGroups.Redis.html उनका कहना है कि सिस्टम मैक्सिममोरी 62gb है (यह तब है जब मैक्सिममोरी-पॉलिसी kicks में) और यह कैंट नहीं बदला जा सकता है । ऐसा लगता है कि एडब्ल्यूएस में रेडिस के साथ कोई फर्क नहीं पड़ता कि हम स्वैप करेंगे।


AWS के पास यह अधिकार है - वे कहते हैं कि मैक्समोरी 62495129600बाइट्स है, जो 58.2 GiB है। मूल्य निर्धारण पेज आप लिंक किए गए GiB, नहीं जीबी की इकाइयों में मेमोरी है। maxmemoryपैरामीटर शायद परिवर्तनीय क्योंकि वहाँ इस तरह के रूप Redis द्वारा प्रदान की बेहतर घुंडी, कर रहे हैं नहीं है reserved-memoryकि परिवर्तनीय हैं (हालांकि कि मुझे मदद नहीं की ...), और एडब्ल्यूएस आप के लिए Redis कह जैसे द्वारा नोड misconfiguring नहीं चाहता है Elasticache VM की तुलना में अधिक मेमोरी का उपयोग वास्तव में किया है।
जोश कुपर्शमीद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.