دليل أمر choom: ضبط OOM Killer وحماية العمليات

نظرة عامة

عندما يستنفد نظام لينكس موارده من الذاكرة العشوائية، يتدخل نظام OOM Killer للتضحية ببعض العمليات حفاظاً على استقرار النواة، وهنا تبرز أهمية أداة choom. يستعرض هذا الدليل التطبيقي كيفية توظيف هذا الأمر لفحص درجات التقييم وتعديل تفضيلات الاستبعاد، بالإضافة إلى تحصين العمليات الحيوية ضد الإنهاء المفاجئ عبر أوامر عملية ومباشرة على الطرفية.

1. التعريف بأداة choom وتجهيز حزم النظام الأساسية

قبل البدء في إدارة أولويات العمليات، يتعين علينا تجهيز البيئة بتثبيت حزمتي util-linux و procps الضامنتين لوجود الأدوات اللازمة.

تحديث المستودعات وتثبيت حزم util-linux وprocps

تكمن الوظيفة الجوهرية لأمر choom في قراءة وتعديل متغير oom_score_adj، وهو المعيار الذي تستند إليه نواة لينكس لتحديد أي العمليات سيتم إسقاطها قسراً عند اختناق الموارد.
يمكننا إلقاء نظرة على بنية الصياغة وخيارات التشغيل المتاحة عبر المعامل --help:
⚙️ [أهم الخيارات المدعومة]

-p, --pid : تحديد معرف العملية (PID) المستهدفة بالقراءة أو التعديل.
-n, --adjust : تعيين قيمة التعديل على تقييم OOM ضمن النطاق الممتد من -1000 إلى 1000.
-h, --help : إظهار دليل التعليمات والمساعدة المختصرة.
-V, --version : استعراض رقم إصدار الأداة الحالي.

استعراض خيارات أمر choom

2. الاستعلام عن نقاط OOM للعمليات النشطة

لإجراء التجارب العملية على بيئة حية، سنطلق عملية تجريبية تعمل في الخلفية لمدة عشر دقائق عبر الأمر sleep 600 &.

تشغيل عملية sleep في الخلفية

نقوم بالتقاط معرف العملية الخلفية وتخزينه في المتغير TARGET_PID، ثم ننفذ choom -p لاستخراج قيمة oom_score_adj الحالية.
تحصل أي عملية قياسية لم تخضع لتعديل مسبق على القيمة الافتراضية 0.

استخراج معرف العملية وفحص درجة oom_score_adj بواسطة choom

للتحقق من مطابقة مخرجات الأداة لما هو مسجل فعلياً داخل طبقة النواة، سنقرأ محتوى الملف oom_score_adj مباشرة من شجرة نظام الملفات /proc.
تُظهر نتيجة القراءة القيمة 0 أيضاً، مما يثبت دقة التزامن بين إعدادات النواة والبيانات المعروضة عبر choom.

التحقق المباشر من قيمة oom_score_adj داخل نظام الملفات proc

3. تعديل معامل أولوية OOM للعمليات قيد التشغيل

لتعديل درجة تعرض العملية للإيقاف، نمرر المعامل -n مصحوباً بالقيمة 500 ونشغل choom بصلاحيات الجذر عبر sudo.
رفع قيمة oom_score_adj إلى رقم موجب يجعل العملية كبش فداء مبكراً، بحيث تختارها النواة للتصفية أولاً في حال حدوث عجز حاد في الذاكرة.

تعديل درجة oom_score_adj للعملية إلى 500 بصلاحيات sudo

نقوم بإعادة الاستعلام عن العملية المستهدفة باستخدام الأمر choom -p للتأكد من سريان التعديل الجديد.
يؤكد الناتج تبدل القيمة من المعيار المبدئي 0 إلى 500 بشكل فوري ومستقر في النظام.

التحقق من نجاح تطبيق قيمة التعديل 500 على العملية

4. إطلاق العمليات بحصانة مسبقة ضد OOM وتنظيف البيئة

عند التعامل مع الخدمات الحساسة التي لا يُسمح بإيقافها، يمكن بدء تشغيلها مع تمرير قيمة -1000 مباشرة لعزلها تماماً عن نطاق رادار OOM Killer.
إن إسناد الحد الأدنى -1000 يمنح العملية حصانة تامة تمنع نواة النظام من المساس بها أو التضحية بها حتى في أسوأ ظروف استنزاف الذاكرة.

إطلاق عملية بحصانة كاملة عبر تعيين القيمة -1000

نسند معرف العملية الجديدة إلى المتغير TARGET_PID ونتحقق من تطبيق الإعداد عبر استدعاء choom -p.
تُظهر شاشة الإخراج القيمة -1000 بوضوح، مؤكدة اكتساب البرنامج للحصانة المطلوبة منذ لحظة انطلاقه الأولى.

التأكد من سريان حصانة OOM بقيمة -1000 على المعرف الجديد

بعد اكتمال مراحل الاختبار، ننهي العمليات العالقة ونحرر موارد الجهاز بتنفيذ أمر الإلغاء pkill -f 'sleep 600' || true.
تضمن هذه الخطوة إغلاق كافة مسارات الاختبار الخلفية والحفاظ على بيئة النظام نظيفة وجاهزة للاستخدام الروتيني.

إنهاء العمليات التجريبية وتنظيف موارد النظام

قدمنا في هذا المقال دليلاً عملياً لكيفية استغلال أداة choom لمراقبة سلوك OOM Killer وحماية البنى التحتية الحيوية في لينكس.
بادر بمواءمة أولويات العمليات في خوادمك التشغيلية لضمان استمرارية الخدمات الهامة حتى في أحلك أوقات الضغط على الذاكرة.