/proc/pid/oom_score_adj - تنظیم
امتیاز
قاتل اتمام
حافظه (OOM-killer)
- /proc/pid/oom_score_adj (از
لینوکس 2.6.36)
- این فایل
میتواند
برای تنظیم
روش
مکاشفهای
نامناسبی (badness
heuristic) مورد
استفاده
برای
انتخاب
فرایندی که
در شرایط
اتمام
حافظه کشته
میشود، به
کار رود.
- روش
مکاشفهای
نامناسبی
مقداری از 0
(هرگز کشته
نشود) تا 1000
(همیشه کشته
شود) را به
هر وظیفهٔ
نامزد
اختصاص
میدهد تا
مشخص کند
کدام
فرایند هدف
قرار گیرد.
واحدها
تقریباً
نسبتی در
امتداد آن
دامنه از
حافظهٔ
مجاز است که
فرایند
میتواند
از آن تخصیص
دهد؛ بر
پایهٔ
برآوردی از
مصرف فعلی
حافظه و
فضای
معاوضه (swap) آن.
برای
نمونه، اگر
وظیفهای
از تمام
حافظهٔ
مجاز
استفاده
کند،
امتیاز
نامناسبی
آن 1000 خواهد
بود. اگر از
نیمی از
حافظهٔ
مجاز خود
استفاده
کند،
امتیاز آن 500
خواهد بود.
- یک عامل
اضافی نیز
در امتیاز
نامناسبی
لحاظ شده
است: به
فرایندهای
ریشه (root) ۳٪
حافظهٔ
بیشتر نسبت
به سایر
وظایف داده
میشود.
- میزان
حافظهٔ
«مجاز» به
زمینهای
بستگی دارد
که در آن
قاتل OOM
فراخوانی
شده است.
اگر به دلیل
اتمام
حافظهٔ
اختصاصیافته
به
مجموعهپردازندهٔ
(cpuset) وظیفهٔ
تخصیصدهنده
باشد،
حافظهٔ
مجاز
نمایانگر
مجموعه
حافظههای
اختصاصیافته
به آن cpuset است
(ببینید: cpuset(7)).
اگر ناشی از
اتمام
گره(های)
خطمشی
حافظه (mempolicy)
باشد،
حافظهٔ
مجاز
نشاندهندهٔ
مجموعه
گرههای mempolicy
است. اگر به
دلیل رسیدن
به محدودیت
حافظه (یا
محدودیت swap)
باشد،
حافظهٔ
مجاز همان
محدودیت
پیکربندیشده
است. در
نهایت، اگر
ناشی از
اتمام
حافظه در کل
سیستم
باشد،
حافظهٔ
مجاز
نمایانگر
تمامی
منابع قابل
تخصیص
خواهد بود.
- مقدار oom_score_adj
پیش از
استفاده
برای تعیین
این که کدام
وظیفه کشته
شود، به
امتیاز
نامناسبی
اضافه
میشود.
مقادیر
قابلقبول
از -1000 (OOM_SCORE_ADJ_MIN) تا +1000
(OOM_SCORE_ADJ_MAX) هستند.
این به فضای
کاربری
اجازه
میدهد
اولویت
ترجیحی را
برای کشته
شدن توسط OOM
کنترل کند،
از ترجیح
همیشگی یک
وظیفهٔ
مشخص تا
غیرفعال
کردن کامل
آن از کشته
شدن توسط OOM.
کمترین
مقدار
ممکن، یعنی
-1000، معادل
غیرفعالسازی
کامل کشته
شدن توسط
قاتل OOM برای
آن وظیفه
است، زیرا
همیشه
امتیاز
نامناسبی 0
را گزارش
خواهد داد.
- در نتیجه،
برای فضای
کاربری
بسیار ساده
است که
میزان
حافظهٔ مد
نظر برای هر
وظیفه را
تعیین کند.
برای
نمونه،
تنظیم یک
مقدار oom_score_adj
روی +500
تقریباً
معادل با
این است که
به باقی
وظایفی که
در منابع
سیستم، cpuset،
خطمشی
حافظه (mempolicy) یا
کنترلکنندهٔ
حافظه
یکسان شریک
هستند،
اجازه داده
شود دستکم
۵۰٪ حافظهٔ
بیشتری
استفاده
کنند. از
سوی دیگر،
مقدار -500
تقریباً
معادل این
خواهد بود
که ۵۰٪ از
حافظهٔ
مجاز وظیفه
از لحاظ شدن
به عنوان
امتیاز
منفی علیه
آن وظیفه
کاسته شود.
- برای
سازگاری رو
به عقب با
هستههای
پیشین،
/proc/pid/oom_adj
همچنان
میتواند
برای تنظیم
امتیاز
نامناسبی
استفاده
شود. مقدار
آن به صورت
خطی با oom_score_adj
مقیاسبندی
میشود.
- نوشتن در
/proc/pid/oom_score_adj یا
/proc/pid/oom_adj دیگری
را با مقدار
مقیاسبندیشدهاش
تغییر
خواهد داد.
- برنامهٔ choom(1)
یک رابط خط
فرمان را
برای تنظیم
مقدار oom_score_adj
یک فرایند
در حال اجرا
یا یک دستور
تازه
اجراشده
ارائه
میدهد.
- /proc/pid/oom_adj (از
لینوکس 2.6.11)
- این فایل
میتواند
برای تنظیم
امتیازی
استفاده
شود که برای
انتخاب
فرایندی که
باید در
وضعیت
اتمام
حافظه (OOM)
کشته شود به
کار میرود.
هسته از این
مقدار برای
یک عملیات
تغییر مکان
بیتی (bit-shift) روی
مقدار oom_score
فرایند
استفاده
میکند:
مقادیر
معتبر در
بازهٔ -16 تا +15
هستند، به
همراه
مقدار
ویژهٔ -17 که
کشته شدن
توسط OOM را به
طور کلی
برای این
فرایند
غیرفعال
میکند. یک
امتیاز
مثبت
احتمال
کشته شدن
این فرایند
توسط قاتل OOM
را افزایش
میدهد؛ یک
امتیاز
منفی این
احتمال را
کاهش
میدهد.
- مقدار
پیشفرض
برای این
فایل 0 است؛
یک فرایند
تازه،
تنظیمات oom_adj
والد خود را
به ارث
میبرد. یک
فرایند
برای
بهروزرسانی
این فایل
باید دارای
مجوزهای
ویژه (CAP_SYS_RESOURCE)
باشد،
هرچند یک
فرایند
همیشه
میتواند
تنظیمات oom_adj
خود را
افزایش دهد
(از لینوکس
2.6.20).
- از لینوکس
2.6.36، استفاده
از این فایل
به نفع
/proc/pid/oom_score_adj
منسوخ شده و
در نهایت در
لینوکس 3.7
حذف شد.