Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

redis bgsave विफल रहा क्योंकि कांटा स्मृति आवंटित नहीं कर सकता

अधिक विशेष रूप से, रेडिस एफएक्यू से

<ब्लॉककोट>

रेडिस बैकग्राउंड सेविंग स्कीमा आधुनिक ऑपरेटिंग सिस्टम में फोर्क के कॉपी-ऑन-राइट सिमेंटिक पर निर्भर करता है:रेडिस फोर्क्स (एक चाइल्ड प्रोसेस बनाता है) जो कि पैरेंट की एक सटीक कॉपी है। चाइल्ड प्रोसेस डीबी को डिस्क पर डंप कर देता है और अंत में बाहर निकल जाता है। सिद्धांत रूप में बच्चे को उतनी ही मेमोरी का उपयोग करना चाहिए जितना कि माता-पिता एक प्रतिलिपि के रूप में करते हैं, लेकिन वास्तव में अधिकांश आधुनिक ऑपरेटिंग सिस्टम द्वारा लागू किए गए कॉपी-ऑन-राइट सिमेंटिक के लिए धन्यवाद, माता-पिता और बच्चे की प्रक्रिया सामान्य मेमोरी पेज साझा करेगी। एक पृष्ठ तभी दोहराया जाएगा जब वह बच्चे या माता-पिता में बदल जाएगा। चूंकि सिद्धांत रूप में सभी पृष्ठ बदल सकते हैं, जबकि बच्चे की प्रक्रिया सहेज रही है, लिनक्स पहले से नहीं बता सकता कि बच्चा कितनी मेमोरी लेगा, इसलिए यदि overcommit_memory सेटिंग शून्य फोर्क पर सेट है तो असफल हो जाएगी जब तक कि उतनी ही मुफ्त रैम न हो सभी मूल स्मृति पृष्ठों को वास्तव में डुप्लिकेट करने की आवश्यकता है, जिसके परिणामस्वरूप यदि आपके पास 3 जीबी का रेडिस डेटासेट है और केवल 2 जीबी मुफ्त मेमोरी है तो यह विफल हो जाएगा।

overcommit_memory को 1 पर सेट करना लिनक्स को आराम करने और अधिक आशावादी आवंटन फैशन में कांटा करने के लिए कहता है, और यह वही है जो आप रेडिस के लिए चाहते हैं।

Redis को उतनी मेमोरी की आवश्यकता नहीं है जितनी OS को लगता है कि यह डिस्क पर लिखने के लिए करता है, इसलिए पहले से ही कांटा विफल हो सकता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस - सेम में से किसी एक का नाम बदलने पर विचार करें या spring.main.allow-bean-definition-overriding=true सेट करके ओवरराइडिंग सक्षम करें

  2. रेडिस और स्प्रिंग डेटा रेडिस के साथ एसएसएल का उपयोग करते समय जेडिस कनेक्शन नहीं मिल सकता है

  3. लॉकिंग और रेडिस

  4. कनेक्शन मल्टीप्लेक्सर। रेडिस सर्वर से कनेक्ट करते समय कनेक्ट ब्रेक

  5. रेडिस में 2 सेट में 750 आइटम डालने का प्रयास करते समय स्टैक एक्सचेंज टाइमआउट अपवाद