نظرة عامة
في البيئات التي تعاني من نقص في موارد الخادم، قد يؤدي تشغيل المهام في الخلفية أو البرامج النصية المجمعة الثقيلة إلى إبطاء استجابة الخدمات الأساسية. في هذه المقالة، سنتعرف على نصائح عملية لضبط أولوية جدولة وحدة المعالجة المركزية (CPU) والحفاظ على استقرار النظام باستخدام الأمرين nice وrenice.
1. التحقق من أولوية العمليات (NI/PR) وإعداد بيئة المراقبة باستخدام htop
نقوم بتثبيت الحزمتين الأساسيتين htop وprocps للتطبيق العملي على مراقبة أولوية العمليات.

يتحقق الأمر ps من المعلومات التفصيلية وقيم الأولوية للعمليات التي تعمل حاليًا على النظام.
في المخرجات المعروضة، يمثل NI قيمة nice التي يمكن للمستخدم تعديلها، بينما يمثل PRI الأولوية الفعلية المخصصة بواسطة مجدول النواة (Kernel Scheduler).
⚙️ [الخيارات الرئيسية]
-e : يحدد ويعرض جميع العمليات التي تعمل على النظام.-o : يعين أعمدة الإخراج (pid, ni, pri, comm، إلخ) بتنسيق مخصص من قِبل المستخدم.-u : يصفي المخرجات لعرض العمليات المملوكة لمستخدم معين فقط.-p : يستعلم عن العمليات المطابقة لمعرف عملية محدد (PID) فقط.-f : يعرض قائمة بتنسيق كامل تتضمن جميع تفاصيل العمليات.

2. تشغيل مهام الخلفية بأولوية منخفضة باستخدام الأمر nice
نقوم بإنشاء دليل عمل مؤقت والانتقال إليه لإنشاء وإدارة ملفات الاختبار المطلوبة للتطبيق العملي بأمان.

باستخدام الأمر nice، نقوم بتعيين قيمة nice إلى 10 لخفض الأولوية والتنازل عن حصة موارد وحدة المعالجة المركزية، مع تشغيل عملية إنشاء ملف كبير في الخلفية (&).

نقوم بالجمع بين الأمر ps وgrep للتحقق من معرف العملية (PID) لعملية dd الجارية والتأكد من تطبيق قيمة nice الفعلية (NI) كما هو مطلوب.

3. تغيير أولوية عملية قيد التشغيل بالفعل في الوقت الفعلي باستخدام الأمر renice
للتطبيق العملي على تغيير الأولوية في الوقت الفعلي، نقوم بتشغيل عملية sleep تنتظر لمدة 300 ثانية في الخلفية (&).

باستخدام المتغير الخاص $! الذي يشير إلى معرف العملية (PID) لأحدث عملية تم تشغيلها في الخلفية، نقوم بحفظه في متغير البيئة TARGET_PID.

نتحقق من قيمة nice الحالية (NI) للعملية المستهدفة باستخدام الأمر ps، ويمكننا ملاحظة أنها تعمل بالقيمة الافتراضية 0.

باستخدام الأمر renice، نقوم بتغيير قيمة nice للعملية المستهدفة التي تعمل بالفعل إلى 15 لخفض أولويتها.
من خلال المخرجات، يمكن التأكد من تغيير الأولوية السابقة (old priority 0) بنجاح إلى الأولوية الجديدة (new priority 15).

نستعلم عن العملية المستهدفة مجددًا باستخدام الأمر ps للتأكد من تطبيق قيمة nice الجديدة (NI) وهي 15 فورًا.

نقوم بإنهاء عملية الاختبار قسرًا (kill -9) بعد اكتمال التدريب لتنظيف موارد النظام.

4. منح أولوية عالية (قيمة nice سالبة) باستخدام صلاحيات root وتنبيهات هامة
لتطبيق قيمة nice سالبة (-5) لا يمكن للمستخدم العادي تعيينها، نستخدم صلاحيات المسؤول عبر sudo لتشغيل عملية ذات أولوية مرتفعة في الخلفية (&).
العملية التي تمنح قيمة nice سالبة تحظى بأولوية تنفيذ أعلى أثناء جدولة وحدة المعالجة المركزية، مما يتيح لها الحصول على تخصيص مكثف لموارد النظام.

نستعلم عن العمليات الجارية باستخدام الأمر ps للتأكد من تطبيق قيمة nice المقصودة (NI) وهي -5 على العملية المستهدفة (sleep).
من خلال النتائج، يمكن ملاحظة أنه على عكس العمليات الافتراضية العادية (0)، تم تعيين قيمة nice سالبة (-5) لتعمل بأولوية عالية.

استعرضنا حتى الآن بإيجاز كيفية ضبط أولوية العمليات باستخدام الأمر nice، والذي يعد مفيدًا للغاية عندما يبدأ خادم لينكس بالتباطؤ.
عندما تصبح موارد الخادم محدودة، جرب تعيين الأولوية المناسبة لكل موقف لتشغيل النظام بطريقة أكثر استقرارًا وسلاسة.