حرف C

مجموعات التحكم (Control Groups)

Control Groups (cgroups)

آخر تحديث: 2026-10-09
مستوى الشرح اختر المستوى التقني المناسب لك

الشرح المبسط

تخيل أن نظام التشغيل لينكس عبارة عن بناية سكنية مشتركة، وكل برنامج يعمل في النظام هو ساكن في هذه البناية. إذا قرر أحد السكان فجأة استهلاك كل المياه المتاحة أو تشغيل كافة الأجهزة الكهربائية بلا توقف، ستنقطع الخدمات عن بقية الجيران ويتعطل المبنى بأكمله. هنا تأتي وظيفة مجموعات التحكم (cgroups)، وهي ميزة أساسية مدمجة داخل نواة (Kernel) لينكس تعمل مثل منظم الموارد الصارم. تتيح لك هذه الميزة تحديد حصة محددة لكل برنامج، مثل وضع سقف لاستهلاك طاقة المعالج (CPU)، أو تحديد حد أقصى للذاكرة العشوائية (RAM)، وحتى تقييد سرعة قراءة وكتابة البيانات على قرص التخزين. عندما يبدأ أي تطبيق في استهلاك الموارد بشكل مفرط بسبب خطأ برمجي، تمنعه هذه التقنية من تجاوز حصته المسموحة، مما يحمي النظام من التوقف التام ويضمن توزيع الموارد بعدالة. وتعد هذه الفكرة البسيطة هي الأساس التقني الأول الذي تعتمد عليه تقنية الحاويات (Containers) مثل منصة دوكر (Docker) لتعمل بكفاءة واستقرار.

الشرح التقني المتقدم

تعد مجموعات التحكم (cgroups) ميزة جوهرية في نواة (Kernel) لينكس، مسؤولة عن إدارة ومراقبة وتقييد استهلاك الموارد المادية مثل المعالج (CPU) والذاكرة والمدخلات والمخرجات (I/O) لمجموعات العمليات.

البنية الهيكلية والتحول إلى الإصدار الثاني (cgroups v2)

تعتمد النواة على نظام ملفات افتراضي لتنظيم العمليات وتطبيق القيود عليها بشكل شجري منظم:

المسار الموحد /sys/fs/cgroup: يمثل نقطة التحكم المركزية في الإصدار الثاني (Unified Hierarchy)، حيث تنتمي كل عملية لمجموعة واحدة تخضع لعدة متحكمات في آن واحد دون تضارب.

التحكم العملي في استهلاك الموارد باستخدام مدير النظام (systemd)

يمكن تقييد استهلاك الذاكرة وحصة المعالج لعملية معينة بشكل فوري دون الحاجة إلى تعديل ملفات الإعدادات الدائمة:

أمر التنفيذ:

systemd-run --scope -p MemoryMax=500M -p CPUQuota=50% stress --vm 1 --vm-bytes 600M

أبرز المتحكمات التقنية ووظائفها داخل النواة:

- متحكم الذاكرة (Memory Controller): يحدد السقف الأعلى عبر memory.max، وعند تجاوزه يتدخل قاتل العمليات (OOM Killer) لإنهاء المهمة المتجاوزة فقط داخل المجموعة.

- متحكم المعالج (CPU Controller): ينظم الحصص الزمنية عبر cpu.weight و cpu.max، مما يمنع أي عملية من احتكار مسارات المعالجة.

- متحكم عدد العمليات (PIDs Controller): يحمي النظام من هجمات حجب الخدمة مثل القنابل الشوكية (Fork Bombs) عن طريق تحديد سقف العمليات عبر pids.max.

- متحكم الإدخال والإخراج (I/O Controller): يضبط معدلات القراءة والكتابة على وسائط التخزين لمنع اختناق النظام عند تشغيل الحاويات (Containers).

ملاحظة ختامية: الصورة الكبرى (نصيحة احترافية)

في خوادم الإنتاج الحديثة، تجنب تعديل ملفات /sys/fs/cgroup يدوياً واعتمد كلياً على وحدات systemd لإدارة القيود، مع التحقق من تفعيل cgroups v2 للاستفادة الكاملة من ميزات مراقبة ضغط الموارد (PSI).