انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تشخيص الاستخدام العالي للمعالج والذاكرة

دليل تشخيص الاستخدام العالي للمعالج والذاكرة على الخوادم باستخدام أوامر top و htop و ps، آلية OOM killer، تحليل العمليات وتحسين الموارد.

وقت القراءة: 15 دقيقة استكشاف الأخطاء وإصلاحها
cpuramtophtoppsoom-killerذاكرةأداء

جدول المحتويات

مقدمة

يمكن أن يؤدي الاستخدام العالي للمعالج أو الذاكرة على خادمك إلى تدهور الأداء وانقطاع الخدمات وحتى عدم استجابة الخادم. في هذا الدليل، سنستعرض الأدوات والطرق التي يمكنك استخدامها لتحديد العمليات المستهلكة للموارد وحل المشكلة.

فحص الحالة السريع

أمر top

top هو الأداة الأساسية لمراقبة موارد النظام في الوقت الفعلي:

hljs bash
top

الحقول الرئيسية:

  • %CPU: نسبة استخدام المعالج
  • %MEM: نسبة استخدام الذاكرة
  • RES: استخدام RAM الفعلي
  • VIRT: استخدام الذاكرة الافتراضية
  • TIME+: إجمالي وقت CPU

اختصارات مفيدة:

  • P — ترتيب حسب استخدام CPU
  • M — ترتيب حسب استخدام الذاكرة
  • k — إنهاء عملية (أدخل PID)
  • 1 — عرض كل نواة CPU بشكل منفصل
  • c — عرض سطر الأوامر الكامل

أمر htop

htop هو نسخة أكثر تقدمًا وسهولة في الاستخدام من top:

hljs bash
# التثبيت
sudo apt install htop -y

# التشغيل
htop

مزايا htop:

  • واجهة مرئية ملونة
  • دعم الماوس
  • التمرير الأفقي والعمودي
  • عرض شجري (F5)
  • التصفية (F4) والبحث (F3)

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

hljs bash
# أعلى 10 عمليات حسب استخدام CPU
ps aux --sort=-%cpu | head -11

# أعلى 10 عمليات حسب استخدام RAM
ps aux --sort=-%mem | head -11

# عمليات مستخدم محدد
ps -u www-data --sort=-%cpu

# عرض شجرة العمليات
ps auxf

تحليل استخدام CPU

تحديد العمليات ذات الاستخدام العالي للمعالج

hljs bash
# استخدام CPU في الوقت الفعلي
mpstat -P ALL 1 5

# استخدام CPU لكل عملية (فترات 5 ثوانٍ)
pidstat -u 5 3

# استخدام CPU لعملية محددة
pidstat -p رقم_PID 1

سجل استخدام CPU

hljs bash
# بيانات CPU التاريخية مع sar
sar -u 1 10

# استخدام CPU لآخر 24 ساعة
sar -u -f /var/log/sysstat/sa$(date +%d)

# فحص load average
uptime
cat /proc/loadavg

يجب مقارنة قيمة load average بعدد أنوية CPU. على خادم بـ 4 أنوية، load average بقيمة 4.0 يعني استخدام CPU بنسبة 100%. قيمة 8.0 تعني حمل زائد.

تحليل العمليات المكثفة للمعالج

hljs bash
# معلومات تفصيلية عن العملية
ps -p رقم_PID -o pid,ppid,user,%cpu,%mem,etime,cmd

# الملفات المفتوحة للعملية
lsof -p رقم_PID

# استدعاءات النظام للعملية
strace -p رقم_PID -c

# خيوط العملية
ps -T -p رقم_PID

تحليل استخدام RAM

فحص حالة الذاكرة

hljs bash
# حالة الذاكرة العامة
free -h

# معلومات الذاكرة التفصيلية
cat /proc/meminfo

# ملخص استخدام الذاكرة
vmstat 1 5

قراءة مخرجات free -h:

              total        used        free      shared  buff/cache   available
Mem:           16Gi       8.2Gi       1.1Gi       256Mi       6.7Gi       7.2Gi
Swap:          4.0Gi       512Mi       3.5Gi

في Linux، قد تبدو الذاكرة "الحرة" منخفضة لأن النظام يستخدم الذاكرة الحرة كذاكرة تخزين مؤقت للقرص. الذاكرة المتاحة فعليًا موجودة في عمود "available".

تحديد العمليات المكثفة للذاكرة

hljs bash
# ترتيب حسب RSS (Resident Set Size)
ps aux --sort=-rss | head -11

# تحليل الذاكرة التفصيلي مع smem
sudo apt install smem -y
smem -t -k -s rss

# استخدام الذاكرة لكل عملية
pmap -x رقم_PID

تحليل استخدام Swap

hljs bash
# العمليات التي تستخدم swap
for file in /proc/*/status; do
  awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file
done | sort -k 2 -n -r | head -10

# مراقبة نشاط swap
vmstat 1 10

# قيمة swappiness
cat /proc/sys/vm/swappiness

# تعيين swappiness (مؤقت)
sudo sysctl vm.swappiness=10

# تعيين swappiness (دائم)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

آلية OOM Killer

يقوم نواة Linux بتفعيل OOM (Out of Memory) Killer عند نفاد الذاكرة، وينهي العملية التي تستهلك أكبر قدر من الذاكرة.

فحص سجلات OOM Killer

hljs bash
# البحث عن أحداث OOM Killer
dmesg | grep -i "oom\|out of memory"

# OOM في سجلات النظام
journalctl -k | grep -i oom

# أحداث OOM الأخيرة
grep -i 'oom' /var/log/syslog

فحص OOM Score

hljs bash
# OOM score لعملية
cat /proc/رقم_PID/oom_score

الحماية من OOM Killer

hljs bash
# حماية عملية حرجة من OOM Killer
echo -1000 > /proc/رقم_PID/oom_score_adj

# حماية OOM في خدمة systemd
[Service]
OOMScoreAdjust=-1000

إنهاء OOM Killer لعملية يشير إلى مشكلة ذاكرة خطيرة على خادمك. إضافة حماية OOM دون إيجاد السبب الجذري لن يحل المشكلة.

إدارة العمليات

تعديل أولوية العمليات

hljs bash
# البدء بقيمة nice (-20 أعلى، 19 أدنى أولوية)
nice -n 10 ./مهمة-طويلة.sh

# تغيير أولوية عملية قيد التشغيل
renice -n 15 -p رقم_PID

إنهاء العمليات

hljs bash
# إنهاء لطيف (SIGTERM)
kill رقم_PID

# إنهاء قسري (SIGKILL)
kill -9 رقم_PID

# إنهاء بالاسم
killall اسم_العملية
pkill -f "نمط_العملية"

سكريبت مراقبة الموارد

hljs bash
#!/bin/bash
CPU_THRESHOLD=90
MEM_THRESHOLD=90
LOG_FILE="/var/log/resource-monitor.log"

while true; do
  TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
  CPU_USAGE=$(top -bn1 | grep 'Cpu(s)' | awk '{print $2}' | cut -d'.' -f1)
  if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
    echo "[$TIMESTAMP] تحذير: استخدام CPU $CPU_USAGE%" >> $LOG_FILE
    ps aux --sort=-%cpu | head -6 >> $LOG_FILE
  fi
  MEM_USAGE=$(free | grep Mem | awk '{printf("%.0f", $3/$2 * 100)}')
  if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then
    echo "[$TIMESTAMP] تحذير: استخدام RAM $MEM_USAGE%" >> $LOG_FILE
    ps aux --sort=-%mem | head -6 >> $LOG_FILE
  fi
  sleep 60
done

الخلاصة

الاستخدام العالي للمعالج والذاكرة مشاكل حرجة تؤثر مباشرة على أداء الخادم. باستخدام أدوات مثل top و htop و ps و vmstat، يمكنك تحديد العمليات المشكلة وضبط الأولويات باستخدام nice/renice وإنهاء العمليات عند الضرورة. الفحص المنتظم لسجلات OOM Killer مهم للكشف المبكر عن مشاكل الذاكرة.