أساسيات Linux والشبكات

إدارة العمليات والذاكرة في Linux

4 دقيقة للقراءة

أسئلة العمليات والذاكرة مضمونة في مقابلات DevOps/SRE. دعنا نتقن المفاهيم التي يحب المقابلون السؤال عنها.

دورة حياة العملية

كل عملية في Linux تتبع هذه الدورة:

fork() → exec() → running → exit() → zombie → reaped

استدعاءات النظام الرئيسية

استدعاء النظام الغرض الأهمية في المقابلة
fork() إنشاء عملية فرعية (نسخة من الأب) "ماذا يحدث عند fork؟"
exec() استبدال صورة العملية ببرنامج جديد "كيف يشغل الشل الأوامر؟"
wait() الأب ينتظر خروج الابن "كيف تمنع الزومبي؟"
exit() إنهاء العملية "ما الفرق عن kill؟"

حالات العملية

# تحقق من حالات العمليات
ps aux

# الحالات التي ستراها:
# R - قيد التشغيل
# S - نائمة (قابلة للمقاطعة)
# D - نائمة (غير قابلة للمقاطعة) - عادةً انتظار I/O
# Z - زومبي
# T - متوقفة

سؤال مقابلة: "ترى العديد من العمليات في حالة D. ماذا يحدث؟"

الجواب: حالة D تعني نوم غير قابل للمقاطعة، عادةً انتظار I/O. العديد من العمليات في حالة D تشير إلى مشاكل في القرص أو NFS. تحقق من iostat وiotop وصحة القرص.

عمليات الزومبي

تحدث الزومبي عندما يخرج الابن لكن الأب لم يستدعِ wait():

# ابحث عن الزومبي
ps aux | awk '$8=="Z" {print $2, $11}'

# عد الزومبي
ps aux | awk '$8=="Z"' | wc -l

كيف تصلح الزومبي:

  1. اقتل العملية الأب (سيتبنى init الزومبي ويحصدهم)
  2. أصلح كود الأب ليستدعي wait() بشكل صحيح للأبناء

إدارة الذاكرة

مفاهيم الذاكرة الافتراضية

كل عملية لها مساحة عنوان افتراضية خاصة بها:

+------------------+
| مساحة النواة      | (غير متاحة للعملية)
+------------------+
| المكدس           | (ينمو للأسفل)
+------------------+
|        ↓         |
|                  |
|        ↑         |
+------------------+
| الكومة           | (تنمو للأعلى، malloc)
+------------------+
| BSS              | (بيانات غير مهيأة)
+------------------+
| البيانات         | (بيانات مهيأة)
+------------------+
| النص             | (الكود)
+------------------+

أوامر الذاكرة

# نظرة عامة على ذاكرة النظام
free -h

# الذاكرة لكل عملية
ps aux --sort=-%mem | head -10

# ذاكرة مفصلة لعملية
cat /proc/<pid>/status | grep -E "VmSize|VmRSS|VmSwap"

# خرائط الذاكرة
pmap <pid>

مقاييس الذاكرة الرئيسية

المقياس المعنى نصيحة للمقابلة
VSZ حجم الذاكرة الافتراضية يشمل المخصص غير المحجوز
RSS حجم المجموعة المقيمة فعلياً في RAM
Shared الذاكرة المشتركة المكتبات المشتركة بين العمليات
Swap الذاكرة المبدلة مؤشر الأداء

قاتل OOM

عند استنفاد الذاكرة، قاتل OOM (نفاد الذاكرة) في Linux يختار عملية لإنهائها:

# تحقق من نقاط OOM (أعلى = احتمال أكبر للقتل)
cat /proc/<pid>/oom_score

# عدّل نقاط OOM (-1000 إلى 1000، -1000 = لا تقتل أبداً)
echo -500 > /proc/<pid>/oom_score_adj

سؤال مقابلة: "خدمة حرجة تستمر في القتل بسبب OOM. كيف تحميها؟"

الجواب:

  1. اضبط oom_score_adj إلى -1000 لحمايتها
  2. تحقق لماذا استنفدت الذاكرة (تسرب ذاكرة؟)
  3. أضف ذاكرة أو قلل الأحمال الأخرى
  4. اضبط حدود الذاكرة للخدمات الأخرى (cgroups)

تمرين المقابلة

س: "الخادم بطيء. تشغل top وترى متوسط الحمل 50 لكن CPU فقط 10% مستخدم. ماذا يحدث؟"

ج: حمل عالٍ مع CPU منخفض يشير إلى انتظار I/O. العمليات محجوبة تنتظر القرص أو الشبكة. تحقق من:

  1. iostat -x 1 لـ I/O القرص
  2. iotop لأي العمليات
  3. vmstat 1 للصورة الشاملة
  4. مشاكل الشبكة إذا كنت تستخدم NFS

التالي، سنغطي أنظمة الملفات والصلاحيات—مفضل آخر في المقابلات. :::

اختبار

الوحدة 2: أساسيات Linux والشبكات

خذ الاختبار