أساسيات Linux والشبكات
إدارة العمليات والذاكرة في Linux
أسئلة العمليات والذاكرة مضمونة في مقابلات 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
كيف تصلح الزومبي:
- اقتل العملية الأب (سيتبنى init الزومبي ويحصدهم)
- أصلح كود الأب ليستدعي 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. كيف تحميها؟"
الجواب:
- اضبط
oom_score_adjإلى -1000 لحمايتها- تحقق لماذا استنفدت الذاكرة (تسرب ذاكرة؟)
- أضف ذاكرة أو قلل الأحمال الأخرى
- اضبط حدود الذاكرة للخدمات الأخرى (cgroups)
تمرين المقابلة
س: "الخادم بطيء. تشغل top وترى متوسط الحمل 50 لكن CPU فقط 10% مستخدم. ماذا يحدث؟"
ج: حمل عالٍ مع CPU منخفض يشير إلى انتظار I/O. العمليات محجوبة تنتظر القرص أو الشبكة. تحقق من:
iostat -x 1لـ I/O القرصiotopلأي العملياتvmstat 1للصورة الشاملة- مشاكل الشبكة إذا كنت تستخدم NFS
التالي، سنغطي أنظمة الملفات والصلاحيات—مفضل آخر في المقابلات. :::