আমার নিম্নলিখিত কনফিগারেশন রয়েছে:
- একটি হোস্ট মেশিন যা তিনটি ডকার পাত্রে চালায়:
- MongoDB
- Redis
- একটি প্রোগ্রাম পূর্ববর্তী দুটি ধারক ব্যবহার করে ডেটা সঞ্চয় করে
রেডিস এবং মঙ্গোডিবি উভয়ই প্রচুর পরিমাণে ডেটা সঞ্চয় করতে ব্যবহৃত হয়। আমি জানি রেডিসের সমস্ত ডেটা র্যামে রাখা দরকার এবং আমি এটি দিয়ে ঠিক আছি। দুর্ভাগ্যক্রমে, যা ঘটে তা হ'ল মঙ্গো প্রচুর পরিমাণে র্যাম নিতে শুরু করে এবং হোস্ট র্যাম পূর্ণ হওয়ার সাথে সাথে আমরা মঙ্গো বা রেডিস ক্র্যাশ করে।
আমি এই সম্পর্কে নিম্নলিখিত পূর্ববর্তী প্রশ্নগুলি পড়েছি:
- সীমাবদ্ধ মোংগোডিবি র্যাম ব্যবহার : সম্ভবত বেশিরভাগ র্যাম ওয়্যার্ডটাইগার ক্যাশে ব্যবহৃত হয় by
- মঙ্গোডিবি সীমাবদ্ধ মেমরি : এখানে দৃশ্যত সমস্যাটি লগ ডেটা ছিল
- মোঙ্গোডিবিতে র্যাম মেমরির ব্যবহার সীমাবদ্ধ করুন: এখানে তারা মঙ্গোর স্মৃতি সীমাবদ্ধ করার পরামর্শ দেয় যাতে এটি এর ক্যাশে / লগ / ডেটার জন্য স্বল্প পরিমাণে মেমরি ব্যবহার করে
- মোঙ্গোডিবি অত্যধিক মেমরি ব্যবহার করছে : তারা এখানে বলছে এটি ওয়্যারডটাইগার ক্যাচিং সিস্টেম যা দ্রুত অ্যাক্সেস সরবরাহ করতে যতটা সম্ভব র্যাম ব্যবহার করে। তারাও রাষ্ট্র
it's completely okay to limit the WiredTiger cache size, since it handles I/O operations pretty efficiently
- মংডোব মেমরির ব্যবহার সীমিত করার কোনও বিকল্প আছে কি? : আবার ক্যাশে করে, তারাও যুক্ত করে
MongoDB uses the LRU (Least Recently Used) cache algorithm to determine which "pages" to release, you will find some more information in these two questions
- মঙ্গোডিবি সূচক / র্যামের সম্পর্ক : উদ্ধৃতি:
MongoDB keeps what it can of the indexes in RAM. They'll be swaped out on an LRU basis. You'll often see documentation that suggests you should keep your "working set" in memory: if the portions of index you're actually accessing fit in memory, you'll be fine.
- মোঙ্গোডিবি ব্যবহার করা ক্যাচিংটি কীভাবে মুক্তি দেবে? : 5 হিসাবে একই উত্তর।
এই উত্তরগুলি থেকে এখন আমি যা বুঝতে পেরেছি তা হ'ল:
- দ্রুত অ্যাক্সেসের জন্য মঙ্গোর পক্ষে র্যামের সমস্ত সূচকে ফিট করা ভাল। তবে, আমার ক্ষেত্রে, আমি বেশ দ্রুত এসএসডি থাকায় আমি আংশিকভাবে ডিস্কে বাস করা সূচকগুলি নিয়ে ভাল আছি।
- র্যাম বেশিরভাগ মোঙ্গো দ্বারা ক্যাচিংয়ের জন্য ব্যবহৃত হয়।
এটি বিবেচনা করে, আমি আশা করছিলাম মঙ্গো যতটা সম্ভব র্যাম স্পেসটি ব্যবহার করার চেষ্টা করবে এবং ব্যবহার করবে তবে কয়েকটি র্যাম স্পেসেও কাজ করতে সক্ষম হবে এবং বেশিরভাগ জিনিস ডিস্ক থেকে আনবে। যাইহোক, আমি ব্যবহার করে --memory
এবং মঙ্গো ডকারের ধারকটির স্মৃতি (উদাহরণস্বরূপ 8 গিগাবাইটে) সীমাবদ্ধ করেছিলাম --memory-swap
, তবে ডিস্ক থেকে স্টাফ আনার পরিবর্তে, মেমো স্মৃতিশক্তি শেষ হওয়ার সাথে সাথে ক্র্যাশ হয়ে যায়।
আমি মঙ্গোকে কেবলমাত্র উপলভ্য মেমরিটি ব্যবহার করতে এবং মেমরির সাথে খাপ খায় না এমন সমস্ত কিছু ডিস্ক থেকে আনতে বাধ্য করতে পারি?
dmesg
অপ্রত্যাশিত শাটডাউনটির সাথে সম্পর্কিত হওয়ার কোনও বার্তা আছে ? ডকারের সাথে সর্বাধিক সম্ভাবনা হ'ল কনটেইনারগুলির প্রক্রিয়াগুলি ধারক সীমা ছাড়াই উপলব্ধ সামগ্রিক র্যাম সনাক্ত করে।
mongod
একটি ধারক (ইন lxc
, cgroups
, Docker, ইত্যাদি) যে নেই না একটি সিস্টেমে উপস্থিত RAM- প্রাপ্তিসাধ্য সব অ্যাক্সেস আছে, তবে আপনি সেট করতে হবে storage.wiredTiger.engineConfig.cacheSizeGB
র্যাম উপলব্ধ পরিমাণ কম মান ধারক সঠিক পরিমাণটি ধারকটিতে চলমান অন্যান্য প্রক্রিয়াগুলির উপর নির্ভর করে, তবে সাধারণত র্যাম বিয়োগ 1GB এর 50% এর ডিফল্ট মানের চেয়ে বেশি হওয়া উচিত নয়।