মেমোগিডিবি স্মৃতিশক্তি শেষ হয়ে যায় তখন শেষ হয়


11

আমার নিম্নলিখিত কনফিগারেশন রয়েছে:

  • একটি হোস্ট মেশিন যা তিনটি ডকার পাত্রে চালায়:
    • MongoDB
    • Redis
    • একটি প্রোগ্রাম পূর্ববর্তী দুটি ধারক ব্যবহার করে ডেটা সঞ্চয় করে

রেডিস এবং মঙ্গোডিবি উভয়ই প্রচুর পরিমাণে ডেটা সঞ্চয় করতে ব্যবহৃত হয়। আমি জানি রেডিসের সমস্ত ডেটা র‍্যামে রাখা দরকার এবং আমি এটি দিয়ে ঠিক আছি। দুর্ভাগ্যক্রমে, যা ঘটে তা হ'ল মঙ্গো প্রচুর পরিমাণে র‌্যাম নিতে শুরু করে এবং হোস্ট র‌্যাম পূর্ণ হওয়ার সাথে সাথে আমরা মঙ্গো বা রেডিস ক্র্যাশ করে।

আমি এই সম্পর্কে নিম্নলিখিত পূর্ববর্তী প্রশ্নগুলি পড়েছি:

  1. সীমাবদ্ধ মোংগোডিবি র‌্যাম ব্যবহার : সম্ভবত বেশিরভাগ র‌্যাম ওয়্যার্ডটাইগার ক্যাশে ব্যবহৃত হয় by
  2. মঙ্গোডিবি সীমাবদ্ধ মেমরি : এখানে দৃশ্যত সমস্যাটি লগ ডেটা ছিল
  3. মোঙ্গোডিবিতে র্যাম মেমরির ব্যবহার সীমাবদ্ধ করুন: এখানে তারা মঙ্গোর স্মৃতি সীমাবদ্ধ করার পরামর্শ দেয় যাতে এটি এর ক্যাশে / লগ / ডেটার জন্য স্বল্প পরিমাণে মেমরি ব্যবহার করে
  4. মোঙ্গোডিবি অত্যধিক মেমরি ব্যবহার করছে : তারা এখানে বলছে এটি ওয়্যারডটাইগার ক্যাচিং সিস্টেম যা দ্রুত অ্যাক্সেস সরবরাহ করতে যতটা সম্ভব র্যাম ব্যবহার করে। তারাও রাষ্ট্রit's completely okay to limit the WiredTiger cache size, since it handles I/O operations pretty efficiently
  5. মংডোব মেমরির ব্যবহার সীমিত করার কোনও বিকল্প আছে কি? : আবার ক্যাশে করে, তারাও যুক্ত করে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
  6. মঙ্গোডিবি সূচক / র‌্যামের সম্পর্ক : উদ্ধৃতি: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.
  7. মোঙ্গোডিবি ব্যবহার করা ক্যাচিংটি কীভাবে মুক্তি দেবে? : 5 হিসাবে একই উত্তর।

এই উত্তরগুলি থেকে এখন আমি যা বুঝতে পেরেছি তা হ'ল:

  1. দ্রুত অ্যাক্সেসের জন্য মঙ্গোর পক্ষে র্যামের সমস্ত সূচকে ফিট করা ভাল। তবে, আমার ক্ষেত্রে, আমি বেশ দ্রুত এসএসডি থাকায় আমি আংশিকভাবে ডিস্কে বাস করা সূচকগুলি নিয়ে ভাল আছি।
  2. র‌্যাম বেশিরভাগ মোঙ্গো দ্বারা ক্যাচিংয়ের জন্য ব্যবহৃত হয়।

এটি বিবেচনা করে, আমি আশা করছিলাম মঙ্গো যতটা সম্ভব র্যাম স্পেসটি ব্যবহার করার চেষ্টা করবে এবং ব্যবহার করবে তবে কয়েকটি র‌্যাম স্পেসেও কাজ করতে সক্ষম হবে এবং বেশিরভাগ জিনিস ডিস্ক থেকে আনবে। যাইহোক, আমি ব্যবহার করে --memoryএবং মঙ্গো ডকারের ধারকটির স্মৃতি (উদাহরণস্বরূপ 8 গিগাবাইটে) সীমাবদ্ধ করেছিলাম --memory-swap, তবে ডিস্ক থেকে স্টাফ আনার পরিবর্তে, মেমো স্মৃতিশক্তি শেষ হওয়ার সাথে সাথে ক্র্যাশ হয়ে যায়।

আমি মঙ্গোকে কেবলমাত্র উপলভ্য মেমরিটি ব্যবহার করতে এবং মেমরির সাথে খাপ খায় না এমন সমস্ত কিছু ডিস্ক থেকে আনতে বাধ্য করতে পারি?


একে ওওএম কিলার বলে। মঙ্গোডিবি পণ্য হার্ডওয়্যার চালানোর জন্য ডিজাইন করা হয়েছে। আমি এটিকে কখনই কৃত্রিমভাবে সীমাবদ্ধ সংস্থানগুলিতে চালিত করব না। আপনার যদি কেবল একটি ছোট ডাটাবেস থাকে, মংগোডিবি আদর্শ পছন্দ নয়। আপনার যদি বৃহত ডাটাবেস থাকে (তিন অঙ্কের মিলিয়ন থেকে বিলিয়ন এন্ট্রি) সীমাবদ্ধ সংস্থানগুলি একটি খারাপ পছন্দ। আপনার সমস্যা অনুসারে: আপনি কেকটি খেতে এবং এটি খেতে পারবেন না। পছন্দ করা.
মার্কাস ডাব্লু

যদি সঠিকভাবে কনফিগার করা থাকে তবে মেমোরি থেকে বেরিয়ে যাওয়ার সময় মঙ্গোডিবির ক্রাশ হওয়া উচিত নয়। আপনি মোংগোডিবি সার্ভারের নির্দিষ্ট সংস্করণ এবং আপনি যে ও / এস ব্যবহার করছেন তা নিশ্চিত করতে এবং ক্র্যাশটিকে আরও বিশদভাবে বর্ণনা করতে পারবেন? উদাহরণস্বরূপ, মঙ্গোডিবি লগ বা dmesgঅপ্রত্যাশিত শাটডাউনটির সাথে সম্পর্কিত হওয়ার কোনও বার্তা আছে ? ডকারের সাথে সর্বাধিক সম্ভাবনা হ'ল কনটেইনারগুলির প্রক্রিয়াগুলি ধারক সীমা ছাড়াই উপলব্ধ সামগ্রিক র‌্যাম সনাক্ত করে।
স্টেনি

অনুযায়ী MongoDB উত্পাদনের নোট : আপনি যদি চালানো mongodএকটি ধারক (ইন lxc, cgroups, Docker, ইত্যাদি) যে নেই না একটি সিস্টেমে উপস্থিত RAM- প্রাপ্তিসাধ্য সব অ্যাক্সেস আছে, তবে আপনি সেট করতে হবে storage.wiredTiger.engineConfig.cacheSizeGBর্যাম উপলব্ধ পরিমাণ কম মান ধারক সঠিক পরিমাণটি ধারকটিতে চলমান অন্যান্য প্রক্রিয়াগুলির উপর নির্ভর করে, তবে সাধারণত র‍্যাম বিয়োগ 1GB এর 50% এর ডিফল্ট মানের চেয়ে বেশি হওয়া উচিত নয়।
স্টেনি

উত্তর:


9

মোঙ্গোডিবি বিওএল অনুসারে এখানে সংস্করণ 3.4 এ পরিবর্তিত হয়েছে: মানগুলি হতে 256MBপারে 10TBএবং এটি হতে পারে float। এছাড়াও, ডিফল্ট মানটিও পরিবর্তিত হয়েছে।

শুরু করে 3.4, ওয়্যার্ডটাইগার অভ্যন্তরীণ ক্যাশে, ডিফল্টরূপে , এর মধ্যে বৃহত্তরটি ব্যবহার করবে:

50% of RAM minus 1 GB, or
256 MB.

এর সাথে WiredTiger, মঙ্গোডিবি ওয়্যার্ডটাইগার internal cache এবং এটি উভয়কেই ব্যবহার করে filesystem cache

এর মাধ্যমে filesystem cache, মঙ্গোডিবি স্বয়ংক্রিয়ভাবে সমস্ত ফ্রি মেমরি ব্যবহার করে যা WiredTiger cacheঅন্য প্রক্রিয়াগুলি দ্বারা ব্যবহৃত হয় না ।

স্টোরেজ.ওয়ায়ার্ডটাইগার.এঞ্জিনকনফিগ.সি.চি.সা.জি . জিWiredTiger অভ্যন্তরীণ ক্যাশের আকার সীমাবদ্ধ করে । অপারেটিং সিস্টেমটি ফাইল সিস্টেমের ক্যাশে উপলভ্য বিনামূল্যে মেমোরি ব্যবহার করবে, যা সংকুচিত মঙ্গোডিবি ডেটা ফাইলগুলিকে মেমরিতে থাকতে দেয়। এছাড়াও, operating systemফাইল সিস্টেম ব্লক এবং ফাইল সিস্টেম ক্যাশে বাফার করার জন্য নিখরচায় যে কোনও নিখরচায় র‌্যাম ব্যবহার করবে।

র‌্যামের অতিরিক্ত ভোক্তাদের সামঞ্জস্য করতে আপনাকে WiredTigerঅভ্যন্তরীণ ক্যাশের আকার হ্রাস করতে হতে পারে ।

আপনার রেফ ওয়্যারটাইড স্টোরেজ ইঞ্জিন এবং কনফিগারেশন ফাইল বিকল্পগুলির জন্য আরও


4

প্রকৃতপক্ষে, যদি আপনি ঘনিষ্ঠভাবে তাকান তবে এটি মঙ্গড নয় যা "মেমোরি অফ আউট মেমরি" এর জন্য মারা যায়, এটি কর্নেল ওওএম (মেমরির বাইরে) ম্যানেজার যা মঙ্গোদকে মেরে ফেলে, কারণ এর বৃহত্তম স্মৃতি ব্যবহার রয়েছে।

হ্যাঁ, আপনি প্যারামিটার monngodb কনফিগারেশন সঙ্গে সমস্যা সমাধানের জন্য চেষ্টা করতে পারেন cacheSizeGB কিন্তু ধারক পরিবেশে, এটি ব্যবহার করার জন্য উত্তম Cgroups সম্পদ সীমিত করতে আপনার তিনটি পাত্রে কোন পেতে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.