انتقل إلى المحتوى الرئيسي

المختبر 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

التحقق​

قائمة التحقق​

تحقق من أنك تستطيع:

  • عرض الاستخدام الكلي والمتاح للذاكرة
  • تحليل التبديل
  • تحديد العمليات التي تستهلك أكبر قدر من الذاكرة
  • مراقبة الذاكرة في الوقت الحقيقي
  • اكتشاف مشاكل الذاكرة
  • تعديل إعدادات الذاكرة

أسئلة للتفكير​

  1. ما الفرق بين MemFree وMemAvailable؟

    • MemFree: الذاكرة الحرة بالكامل
    • MemAvailable: الذاكرة المتاحة (تشمل ذاكرة التخزين المؤقت القابلة للاسترداد)
  2. متى يتم استخدام التبديل؟

    • عندما تكون RAM الفعلية مشبعة
    • يقوم النواة بنقل الصفحات غير النشطة إلى التبديل
  3. لماذا يمكن أن يكون إفراغ ذاكرة التخزين المؤقت خطيرًا؟

    • ذاكرة التخزين المؤقت تحسن الأداء
    • إفراغها قد يبطئ النظام مؤقتًا

الخطوات التالية​

  • المختبر 2.3: مراقبة النظام المتقدمة
  • الفصل 2.4: نظام الملفات الافتراضي (VFS)
  • الفصل 2.5: إدارة العمليات

تم إنشاء المختبر في: ديسمبر 2024