OOM হত্যাকারী কীভাবে সিদ্ধান্ত নিতে পারে প্রথমে কোন প্রক্রিয়াটিকে হত্যা করা উচিত?


92

এই উত্তরটি যখন কোনও OOM- এর পরিস্থিতির উপর নির্ভর করে তখন এর মানটির ভিত্তিতে কার্নেল দ্বারা নেওয়া পদক্ষেপগুলি ব্যাখ্যা করে sysctl vm.overcommit_memory

যখন overcommit_memory0 বা 1 তে সেট করা থাকে তখন overcommitসক্ষম করা থাকে এবং প্রোগ্রামগুলি সত্যই উপলব্ধ থেকে বেশি মেমরি বরাদ্দ করার অনুমতি দেয়।

এখন এই পরিস্থিতিতে যখন আমরা স্মৃতি থেকে সরে যাই তখন কী হয়? OOM হত্যাকারী কীভাবে সিদ্ধান্ত নিতে পারে প্রথমে কোন প্রক্রিয়াটিকে হত্যা করা উচিত?


1
আমি বিশ্বাস করি যে মানগুলি 1 2 2 - 0 এবং 1 নয়
fpmurphy

এখান থেকে সার্ভারফল্ট / প্রশ্ন / 606185/… , 0 এবং 1 হ'ল সঠিক মান।
রুই এফ রিবেইরো


মতে kernel.org/doc/Documentation/vm/overcommit-accounting 0, 1, এবং 2 সকল বৈধ মান।
ডেরেক লুইস

উত্তর:


109

যদি মেমোরি প্রক্রিয়াগুলির দ্বারা সম্পূর্ণরূপে ব্যবহার করা হয়, সিস্টেমের স্থায়িত্বকে যে পরিমাণে হুমকির মুখে ফেলতে পারে তবে OOM হত্যাকারী ছবিটিতে আসে।

দ্রষ্টব্য: কার্নেল চালানোর চেষ্টা করছে এমন অন্যান্য প্রক্রিয়াটি সুষ্ঠুভাবে পরিচালনার জন্য পর্যাপ্ত মেমরি মুক্ত না হওয়া পর্যন্ত হত্যার প্রক্রিয়া চালিয়ে যাওয়া ওওম কিলারের কাজ।

ওওম কিলারকে হত্যা করার জন্য সেরা প্রক্রিয়া (এস) নির্বাচন করতে হবে । সেরা এখানে সেই প্রক্রিয়াটিকে বোঝায় যা হত্যার পরে সর্বাধিক স্মৃতি মুক্ত করবে এবং এটি সিস্টেমের পক্ষেও সবচেয়ে কম গুরুত্বপূর্ণ।

প্রাথমিক লক্ষ্যটি হ'ল ন্যূনতম সংখ্যক প্রক্রিয়াগুলিকে হত্যা করা যা ক্ষতিগুলি হ্রাস করে এবং একই সাথে মেমরির মুক্ত হওয়া পরিমাণকে সর্বাধিক করে তোলে।

এটির সুবিধার্থে কার্নেল oom_scoreপ্রতিটি প্রসেসের জন্য একটি বজায় রাখে । আপনি ডিরেক্টরিতে ফাইল সিস্টেমের oom_scoreপ্রতিটি প্রক্রিয়া দেখতে পাবেন can/procpid

$ cat /proc/10292/oom_score

যে oom_scoreকোনও প্রক্রিয়াটির মূল্য তত বেশি , অপ্রতৃত স্মৃতি পরিস্থিতিতে ওওম কিলারের হাতে মারা যাওয়ার সম্ভাবনা তত বেশি ।

কিভাবে OOM_Scoreগণনা করা হয়?

ডেভিডের প্যাচ সেটে, পুরানো খারাপতা () হিউরিস্টিকস প্রায় সম্পূর্ণভাবে চলে গেছে। পরিবর্তে, গণনা প্রক্রিয়াটি উপলব্ধ মেমরির কত শতাংশ ব্যবহার করছে তা একটি সাধারণ প্রশ্নে পরিণত হয়। যদি সামগ্রিকভাবে সিস্টেমে মেমরির স্বল্পতা থাকে, তবে "উপলব্ধ মেমরি" হ'ল সিস্টেমের জন্য উপলব্ধ সমস্ত র্যাম এবং অদলবদলের যোগফল।

যদি পরিবর্তে, প্রদত্ত সিপুয়েসেট / নিয়ন্ত্রণ গোষ্ঠীকে মেমরি মঞ্জুর করে OOM পরিস্থিতি সৃষ্টি হয়, তবে "উপলব্ধ মেমরি" সেই নিয়ন্ত্রণ গোষ্ঠীতে বরাদ্দকৃত মোট পরিমাণ। কোনও মেমরি নীতি দ্বারা আরোপিত সীমা অতিক্রম করা হলে একই ধরণের গণনা করা হয়। প্রতিটি ক্ষেত্রে, প্রক্রিয়াটির মেমরির ব্যবহারটিকে তার আবাসিক সেট (এটি ব্যবহার করছে র‌্যাম পৃষ্ঠাগুলির সংখ্যা) এবং এর অদলবদীর যোগফল হিসাবে গণ্য করা হয়।

এই গণনা ফলাফল হিসাবে একটি শতাংশ-বার-দশ নম্বর উত্পাদন করে; এমন কোনও প্রক্রিয়া যা এতে উপলব্ধ মেমরির প্রতিটি বাইট ব্যবহার করছে তার স্কোর 1000 হবে, অন্যদিকে কোনও স্মৃতি ব্যবহার না করে কোনও প্রক্রিয়া শূন্যের স্কোর পাবে। এই স্কোরটিতে খুব অল্প কিছু হিউরিস্টিক টুইট রয়েছে, তবে কোডটি এখনও ব্যবহারকারী-মালিকানাধীন প্রক্রিয়াগুলির তুলনায় কিছুটা মূল্যবান বলে ধারণা করাতে মূলের মালিকানাধীন প্রক্রিয়াগুলির স্কোর থেকে অল্প পরিমাণ (30) বিয়োগ করে।

অন্য একটি টুইট যা প্রয়োগ করা হয় তা হ'ল প্রতিটি প্রসেসের oom_score_adj ভেরিয়েবলের মধ্যে থাকা মান যুক্ত করা, যা / proc এর মাধ্যমে সামঞ্জস্য করা যায়। এই নকটি ব্যবহারকারীর স্পেসে ওওএম হত্যাকারীর প্রতি প্রতিটি প্রক্রিয়াটির আকর্ষণীয়তার সামঞ্জস্য করতে দেয়; এটি -1000 এ সেট করা ওওএম কিলগুলি সম্পূর্ণরূপে অক্ষম করবে, যখন +1000 এ সেট করা সম্পর্কিত প্রক্রিয়াটিতে একটি বৃহত লক্ষ্য আঁকার সমতুল্য।

তথ্যসূত্র

http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose- which- process https://serverfault.com/a/571326


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