الخادم يعمل ببطء: تشخيص المعالج والذاكرة والقرص
دليل اكتشاف وحل مشاكل أداء الخادم: قائمة تحقق للمعالج والذاكرة والقرص وswap وتحليل العمليات واختبار الشبكة. تشخيص بطء خادم Linux.
جدول المحتويات
مقدمة
إذا كان خادمك يعمل ببطء، يجب اتباع قائمة تحقق منهجية لتحديد مصدر المشكلة. يشرح هذا الدليل أكثر مشاكل الأداء شيوعاً وحلولها خطوة بخطوة.
هذا الدليل مُعد لخوادم Linux (Ubuntu، Debian، CentOS، Rocky Linux). لـ Windows Server تُجرى فحوصات مماثلة بأدوات مختلفة.
1. فحص استخدام المعالج
ارتفاع استخدام المعالج هو السبب الأكثر شيوعاً لبطء الخادم.
حالة المعالج الفورية
# استخدام المعالج العام
top -bn1 | head -5
# عرض تفصيلي وتفاعلي
htop
# استخدام المعالج حسب النواة
mpstat -P ALL 1 5
العمليات الأكثر استهلاكاً للمعالج
# قائمة العمليات مرتبة حسب استخدام المعالج
ps aux --sort=-%cpu | head -20
# مراقبة في الوقت الفعلي
top -o %CPU
إذا كان استخدام المعالج باستمرار فوق 90%، يجب تحديد العمليات المكثفة وتحسينها أو زيادة موارد الخادم.
اقتراحات الحل
- أوقف العمليات غير الضرورية:
kill -9 PID - حسّن إعدادات التطبيق (عدد العمال، حد الخيوط)
- فكّر في زيادة موارد المعالج (ترقية VDS)
2. فحص استخدام الذاكرة
عدم كفاية الذاكرة يؤدي إلى استخدام swap وبطء شديد في الخادم.
حالة الذاكرة
# حالة الذاكرة العامة
free -h
# معلومات الذاكرة التفصيلية
cat /proc/meminfo | head -10
# استخدام الذاكرة حسب العملية
ps aux --sort=-%mem | head -20
تفسير مثال المخرجات
total used free shared buff/cache available
Mem: 7.8Gi 6.2Gi 0.3Gi 0.1Gi 1.3Gi 1.2Gi
Swap: 2.0Gi 1.5Gi 0.5Gi
| المقياس | صحي | تحذير | حرج |
|---|---|---|---|
| استخدام الذاكرة | < 70% | 70-90% | > 90% |
| استخدام Swap | 0 | < 25% | > 50% |
| المتاح | > 20% | 10-20% | < 10% |
إذا كان استخدام swap مرتفعاً (> 50%)، فالذاكرة غير كافية. Swap يعمل على القرص لذا هو أبطأ بكثير من الذاكرة.
3. فحص استخدام القرص والإدخال/الإخراج
مساحة القرص
# ملخص استخدام القرص
df -h
# البحث عن أكبر المجلدات
du -sh /* 2>/dev/null | sort -rh | head -10
# البحث عن أكبر الملفات
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -10
عندما يتجاوز استخدام القرص 90%، قد تبدأ مشاكل الأداء. فوق 95% مستوى حرج — يجب تحرير مساحة فوراً.
أداء إدخال/إخراج القرص
# إدخال/إخراج القرص الفوري
iostat -x 1 5
# استخدام الإدخال/الإخراج حسب العملية
iotop -o
# اختبار سرعة القراءة/الكتابة
dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 oflag=direct
rm /tmp/testfile
| المقياس | NVMe SSD | SATA SSD | HDD |
|---|---|---|---|
| القراءة | 3000+ ميجابايت/ث | 500+ ميجابايت/ث | 100-200 ميجابايت/ث |
| الكتابة | 2000+ ميجابايت/ث | 400+ ميجابايت/ث | 80-150 ميجابايت/ث |
| IOPS | 500 ألف+ | 50 ألف+ | 100-200 |
4. تحليل استخدام Swap
إذا كان استخدام swap مرتفعاً، فالذاكرة غير كافية والخادم يدير الذاكرة عبر القرص.
# حالة swap
free -h | grep Swap
swapon --show
# أي العمليات تستخدم swap؟
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file 2>/dev/null
done | sort -k2 -rn | head -10
تنظيف Swap (حل مؤقت)
# تنظيف swap إذا كانت هناك ذاكرة فارغة كافية
sudo swapoff -a && sudo swapon -a
تنظيف swap حل مؤقت. للحل الدائم، قم بزيادة حجم الذاكرة أو حسّن التطبيقات المستهلكة للذاكرة.
5. فحص أداء الشبكة
# إحصائيات واجهة الشبكة
ifconfig eth0
# عدد الاتصالات
ss -s
# الاتصالات النشطة (أكثر عناوين IP اتصالاً)
ss -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
# استخدام عرض النطاق (يتطلب nload)
nload eth0
# اختبار السرعة
wget -O /dev/null http://speedtest.tele2.net/10MB.zip 2>&1 | tail -2
عدد كبير من الاتصالات (10,000+) قد يستنزف موارد الخادم. قد تكون تحت هجوم DDoS — تحقق من سجل الهجمات في لوحة Path.
6. تحليل العمليات
# عدد العمليات الجارية
ps aux | wc -l
# العمليات الميتة (zombie)
ps aux | awk '{if ($8 == "Z") print}'
# العمليات الأطول تشغيلاً
ps -eo pid,etime,comm --sort=-etime | head -20
# استخدام الموارد لتطبيق معين
ps aux | grep -i mysql
ps aux | grep -i java
ps aux | grep -i node
7. فحص سجلات النظام
# آخر أخطاء النظام
dmesg | tail -50
# سجلات OOM (نفاد الذاكرة) killer
dmesg | grep -i "oom\|killed process"
# سجلات النظام
journalctl -p err --since "1 hour ago"
# أخطاء القرص
dmesg | grep -i "error\|fail\|i/o"
إذا رأيت سجلات OOM killer، فالذاكرة غير كافية والنظام يُنهي العمليات قسراً لتحرير الذاكرة.
قائمة التحقق السريعة
# ملخص الحالة العامة بأمر واحد
echo "=== CPU ==="; top -bn1 | head -5; echo "\n=== RAM ==="; free -h; echo "\n=== DISK ==="; df -h /; echo "\n=== LOAD ==="; uptime; echo "\n=== TOP PROCESSES ==="; ps aux --sort=-%cpu | head -5
متى يجب التواصل مع فريق الدعم؟
- إذا لم تجد مشكلة واضحة في الفحوصات أعلاه
- إذا كنت تشك في مشكلة على مستوى العتاد
- إذا كان أداء الشبكة منخفضاً وتشك في هجوم DDoS
- إذا كان OOM killer يتفعل باستمرار
إرفاق مخرجات الأوامر أعلاه عند إنشاء طلب الدعم يساعد في حل المشكلة بشكل أسرع.
مقالات ذات صلة
مشكلة اتصال SSH: لا يمكن الاتصال بالخادم — الحل
دليل حل مشاكل اتصال SSH: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ SSH وخطوات استكشاف الأخطاء وإصلاحها.
مشكلة اتصال RDP: لا يمكن الاتصال بـ Windows Server
دليل حل مشاكل اتصال RDP: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ RDP وخطوات استكشاف الأخطاء وإصلاحها.
كيفية إجراء اختبار MTR وإرسال النتائج للدعم
دليل اختبار الشبكة باستخدام WinMTR وLinux MTR، إنشاء قاعدة فلترة ICMP وإرسال النتائج لفريق الدعم. تشخيص فقدان الحزم والتأخير في الشبكة.