المختبر 2.2 - تحليل إدارة الذاكرة
الأهداف
في نهاية هذا المختبر، ستكون قادرًا على:
- تحليل استخدام الذاكرة
- فهم التبديل
- مراقبة الذاكرة لكل عملية
- تحديد تسريبات الذاكرة
- تحسين استخدام الذاكرة
المتطلبات الأساسية
- نظام لينكس وظيفي
- وصول root أو sudo
- فتح الطرفية
التمرين 1: معلومات الذاكرة الأساسية
الخطوة 1: نظرة عامة
# معلومات الذاكرة الكاملة
free -h
# معلومات مفصلة
cat /proc/meminfo
# نظرة بسيطة
free
السؤال: كم لديك من ذاكرة RAM؟ كم منها مستخدم؟
الخطوة 2: تحليل مفصل
# عرض جميع المعلومات
cat /proc/meminfo | head -20
# الذاكرة الكلية
grep MemTotal /proc/meminfo
# الذاكرة الحرة
grep MemFree /proc/meminfo
# الذاكرة المتاحة (مختلفة عن الحرة)
grep MemAvailable /proc/meminfo
توضيح:
- MemTotal: إجمالي RAM
- MemFree: RAM الحرة بالكامل
- MemAvailable: RAM المتاحة للعمليات الجديدة (تشمل ذاكرة التخزين المؤقت القابلة للاسترداد)
التمرين 2: التبديل
الخطوة 1: معلومات التبديل
# عرض التبديل
swapon --show
# تفاصيل التبديل
cat /proc/swaps
# استخدام التبديل
free -h | grep Swap
الخطوة 2: إنشاء ملف تبديل (اختياري)
# إنشاء ملف بحجم 1GB للتبديل
sudo fallocate -l 1G /swapfile
# أذونات آمنة
sudo chmod 600 /swapfile
# تهيئة للتبديل
sudo mkswap /swapfile
# تفعيل
sudo swapon /swapfile
# تحقق
swapon --show
الخطوة 3: تبديل دائم
# إضافة إلى /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# تحقق
cat /etc/fstab | grep swap
التمرين 3: الذاكرة لكل عملية
الخطوة 1: أعلى المستهلكين
# أعلى 10 عمليات حسب الذاكرة
ps aux --sort=-%mem | head -11
# مع التفاصيل
ps aux --sort=-%mem -o pid,user,%mem,%cpu,cmd | head -11
الخطوة 2: ذاكرة عملية محددة
# العثور على عملية (مثال: firefox)
ps aux | grep firefox
# عرض ذاكرة PID
cat /proc/<PID>/status | grep -E 'VmSize|VmRSS|VmData'
# أو مع pmap
pmap <PID>
توضيح:
- VmSize: الحجم الافتراضي الكلي
- VmRSS: RAM الفعلية المستخدمة
- VmData: ذاكرة البيانات
الخطوة 3: سكربت التحليل
# إنشاء سكربت
cat > mem-analysis.sh << 'EOF'
#!/bin/bash
echo "=== أعلى 5 عمليات الذاكرة ==="
ps aux --sort=-%mem | head -6
echo
echo "=== استخدام الذاكرة ==="
free -h
echo
echo "=== التبديل ==="
swapon --show
EOF
chmod +x mem-analysis.sh
./mem-analysis.sh
التمرين 4: المراقبة في الوقت الحقيقي
الخطوة 1: vmstat
# إحصائيات كل ثانية
vmstat 1
# 10 عينات
vmstat 1 10
# تفسير الأعمدة:
# - swpd: التبديل المستخدم
# - free: الذاكرة الحرة
# - buff: ذاكرة التخزين المؤقت
# - cache: ذاكرة الصفحة المؤقتة
# - si/so: التبديل الداخل/الخارج
الخطوة 2: sar (إذا كان مثبتًا)
# تثبيت sysstat
sudo apt install sysstat
# إحصائيات الذاكرة
sar -r 1 10
# التاريخ
sar -r
الخطوة 3: سكربت المراقبة
# مراقبة مستمرة
watch -n 1 'free -h && echo && ps aux --sort=-%mem | head -6'
التمرين 5: اكتشاف تسريبات الذاكرة
الخطوة 1: المراقبة المستمرة
# إنشاء سكربت مراقبة
cat > mem-watch.sh << 'EOF'
#!/bin/bash
while true; do
clear
echo "=== $(date) ==="
free -h
echo
echo "=== أعلى 5 ذاكرة ==="
ps aux --sort=-%mem | head -6
sleep 2
done
EOF
chmod +x mem-watch.sh
# تشغيل: ./mem-watch.sh
الخطوة 2: تحليل عملية
# متابعة تطور ذاكرة عملية
watch -n 1 'ps -p <PID> -o pid,%mem,%cpu,rss,vsz,cmd'
الخطوة 3: التنبيهات
# سكربت تنبيه إذا كانت الذاكرة > 80%
cat > mem-alert.sh << 'EOF'
#!/bin/bash
THRESHOLD=80
MEM_USED=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USED" -gt "$THRESHOLD" ]; then
echo "تنبيه: الذاكرة عند ${MEM_USED}%"
ps aux --sort=-%mem | head -6
fi
EOF
chmod +x mem-alert.sh
./mem-alert.sh
التمرين 6: تحسين الذاكرة
الخطوة 1: تنظيف ذاكرة التخزين المؤقت (تنبيه!)
# عرض ذاكرة التخزين المؤقت
free -h
# إفراغ ذاكرة التخزين المؤقت (إذا كان ضروريًا حقًا)
# تنبيه: قد يبطئ النظام مؤقتًا
sudo sync
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
# تحقق
free -h
الخطوة 2: تعديل Swappiness
# عرض swappiness الحالي
cat /proc/sys/vm/swappiness
# تغيير مؤقت (0-100، أقل = أقل تبديل)
sudo sysctl vm.swappiness=10
# دائم: /etc/sysctl.conf
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
الخطوة 3: حدود الذاكرة
# عرض حدود عملية
cat /proc/<PID>/limits | grep memory
# تحديد باستخدام systemd
systemd-run --slice=my-slice --property=MemoryLimit=512M commande
التحقق
قائمة التحقق
تحقق من أنك تستطيع:
- عرض الاستخدام الكلي والمتاح للذاكرة
- تحليل التبديل
- تحديد العمليات التي تستهلك أكبر قدر من الذاكرة
- مراقبة الذاكرة في الوقت الحقيقي
- اكتشاف مشاكل الذاكرة
- تعديل إعدادات الذاكرة
أسئلة للتفكير
-
ما الفرق بين MemFree وMemAvailable؟
- MemFree: الذاكرة الحرة بالكامل
- MemAvailable: الذاكرة المتاحة (تشمل ذاكرة التخزين المؤقت القابلة للاسترداد)
-
متى يتم استخدام التبديل؟
- عندما تكون RAM الفعلية مشبعة
- يقوم النواة بنقل الصفحات غير النشطة إلى التبديل
-
لماذا يمكن أن يكون إفراغ ذاكرة التخزين المؤقت خطيرًا؟
- ذاكرة التخزين المؤقت تحسن الأداء
- إفراغها قد يبطئ النظام مؤقتًا
الخطوات التالية
- المختبر 2.3: مراقبة النظام المتقدمة
- الفصل 2.4: نظام الملفات الافتراضي (VFS)
- الفصل 2.5: إدارة العمليات
تم إنشاء المختبر في: ديسمبر 2024