مشكلة اتصال SSH: لا يمكن الاتصال بالخادم — الحل
دليل حل مشاكل اتصال SSH: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ SSH وخطوات استكشاف الأخطاء وإصلاحها.
دليل تشخيص الاستخدام العالي للمعالج والذاكرة على الخوادم باستخدام أوامر top و htop و ps، آلية OOM killer، تحليل العمليات وتحسين الموارد.
يمكن أن يؤدي الاستخدام العالي للمعالج أو الذاكرة على خادمك إلى تدهور الأداء وانقطاع الخدمات وحتى عدم استجابة الخادم. في هذا الدليل، سنستعرض الأدوات والطرق التي يمكنك استخدامها لتحديد العمليات المستهلكة للموارد وحل المشكلة.
top هو الأداة الأساسية لمراقبة موارد النظام في الوقت الفعلي:
top
الحقول الرئيسية:
اختصارات مفيدة:
P — ترتيب حسب استخدام CPUM — ترتيب حسب استخدام الذاكرةk — إنهاء عملية (أدخل PID)1 — عرض كل نواة CPU بشكل منفصلc — عرض سطر الأوامر الكاملhtop هو نسخة أكثر تقدمًا وسهولة في الاستخدام من top:
# التثبيت
sudo apt install htop -y
# التشغيل
htop
مزايا htop:
# أعلى 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 في الوقت الفعلي
mpstat -P ALL 1 5
# استخدام CPU لكل عملية (فترات 5 ثوانٍ)
pidstat -u 5 3
# استخدام CPU لعملية محددة
pidstat -p رقم_PID 1
# بيانات 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 تعني حمل زائد.
# معلومات تفصيلية عن العملية
ps -p رقم_PID -o pid,ppid,user,%cpu,%mem,etime,cmd
# الملفات المفتوحة للعملية
lsof -p رقم_PID
# استدعاءات النظام للعملية
strace -p رقم_PID -c
# خيوط العملية
ps -T -p رقم_PID
# حالة الذاكرة العامة
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".
# ترتيب حسب 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
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
يقوم نواة Linux بتفعيل OOM (Out of Memory) Killer عند نفاد الذاكرة، وينهي العملية التي تستهلك أكبر قدر من الذاكرة.
# البحث عن أحداث OOM Killer
dmesg | grep -i "oom\|out of memory"
# OOM في سجلات النظام
journalctl -k | grep -i oom
# أحداث OOM الأخيرة
grep -i 'oom' /var/log/syslog
# OOM score لعملية
cat /proc/رقم_PID/oom_score
# حماية عملية حرجة من OOM Killer
echo -1000 > /proc/رقم_PID/oom_score_adj
# حماية OOM في خدمة systemd
[Service]
OOMScoreAdjust=-1000
إنهاء OOM Killer لعملية يشير إلى مشكلة ذاكرة خطيرة على خادمك. إضافة حماية OOM دون إيجاد السبب الجذري لن يحل المشكلة.
# البدء بقيمة nice (-20 أعلى، 19 أدنى أولوية)
nice -n 10 ./مهمة-طويلة.sh
# تغيير أولوية عملية قيد التشغيل
renice -n 15 -p رقم_PID
# إنهاء لطيف (SIGTERM)
kill رقم_PID
# إنهاء قسري (SIGKILL)
kill -9 رقم_PID
# إنهاء بالاسم
killall اسم_العملية
pkill -f "نمط_العملية"
#!/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 مهم للكشف المبكر عن مشاكل الذاكرة.
يُظهر load average متوسط حمل النظام خلال آخر 1 و 5 و 15 دقيقة. يجب مقارنته بعدد أنوية CPU. على خادم بـ 4 أنوية، load average بقيمة 4.0 يعني استخدام 100%. التجاوز المستمر لعدد الأنوية يشير إلى حمل زائد.
لا، Linux يستخدم الذاكرة الحرة كذاكرة تخزين مؤقت للقرص. الذاكرة المتاحة فعليًا موجودة في عمود 'available' في مخرجات free -h. إذا كانت هذه القيمة منخفضة، فهناك مشكلة في الذاكرة.
ينهي OOM Killer العملية ذات أعلى oom_score، وهي عادةً العملية التي تستهلك أكبر قدر من الذاكرة. يمكنك حماية الخدمات الحرجة بتعيين oom_score_adj إلى -1000.
اضغط 'c' في top لعرض سطر الأوامر الكامل. اضغط أيضًا 'H' لرؤية الخيوط. إذا كانت خيوط النواة (بين أقواس مربعة) تستخدم CPU عالي، فقد تكون مشكلة في العتاد أو التعريف.
حدد أولاً أي العمليات تستخدم swap. إذا كانت RAM غير كافية، قم بترقية خطة الخادم. يمكنك تقليل swappiness (vm.swappiness=10) لجعل النظام يستخدم swap بشكل أقل. لكن الحل الحقيقي هو توفير RAM كافية.
دليل حل مشاكل اتصال SSH: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ SSH وخطوات استكشاف الأخطاء وإصلاحها.
دليل حل مشاكل اتصال RDP: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ RDP وخطوات استكشاف الأخطاء وإصلاحها.
دليل اختبار الشبكة باستخدام WinMTR وLinux MTR، إنشاء قاعدة فلترة ICMP وإرسال النتائج لفريق الدعم. تشخيص فقدان الحزم والتأخير في الشبكة.