أصبح خادمي بطيئًا: كيف تفحص RAM وCPU والقرص
إذا أصبح خادمك بطيئًا فانظر في ثلاثة أشياء: RAM وCPU والقرص. اتصل ونفّذ ثلاثة أوامر: free -h للذاكرة وtop للمعالج وdf -h للقرص. والذي يمتلئ منها هو عنق الزجاجة. وإذا بدت الثلاثة سليمة فالمشكلة عادةً في التطبيق نفسه.
ابدأ بالحمل
متوسط الحمل (load average) هو متوسط عدد العمليات التي تنتظر CPU أو القرص. والأرقام الثلاثة الأولى في المخرجات أدناه هي المتوسطات في آخر 1 و5 و15 دقيقة. قارنها بعدد أنوية الخادم لديك:
cat /proc/loadavg
nproc
إذا بقي الحمل أعلى من عدد الأنوية طويلًا فالخادم لا يواكب عمله.
RAM: free -h
free -h
أهم عمود هو available. فإذا كان صغيرًا جدًا وكان صف Swap يمتلئ فقد نفدت RAM. وحين تنفد الذاكرة تقتل النواة إحدى العمليات الأكثر استهلاكًا للذاكرة (OOM killer). وإغلاق قاعدة بيانات أو تطبيق ويب من تلقاء نفسه علامة شائعة على ذلك. تحقق هكذا:
sudo dmesg -T | grep -i -E "out of memory|killed process"
CPU: top
top
في الشاشة التي تُفتح، يرتّب المفتاح P العمليات بحسب استخدام CPU ويرتّبها المفتاح M بحسب استخدام الذاكرة. واضغط q للخروج. وفي سطر CPU في الأعلى انظر إلى ما يلي:
- us: حصة عمليات المستخدم. إذا كانت مرتفعة فهناك تطبيق يلتهم CPU.
- wa: الوقت المقضي في انتظار إدخال القرص وإخراجه. إذا كان مرتفعًا فالمشكلة ليست في CPU بل في القرص.
- st: الوقت "المسروق" من الخادم الافتراضي، أي الوقت الذي منحته طبقة المحاكاة الافتراضية للمعالج لجهة أخرى. إذا ظل مرتفعًا فقد لا تكون المشكلة داخل خادمك. في هذه الحالة تواصل مع الدعم.
القرص: df -h
df -h
df -i
يعرض الأمر الأول المساحة المستخدمة، ويعرض الثاني حد عدد الملفات (inodes). وحين يمتلئ القرص تمامًا لا تستطيع قواعد البيانات والتطبيقات الكتابة، فيبطؤ الخادم أو تظهر أخطاء. اعرف ما الذي يشغل المساحة:
sudo du -xh / --max-depth=1 2>/dev/null | sort -h | tail -n 8
إذا كبرت سجلات النظام فيمكنك تصغيرها بالأمر sudo journalctl --vacuum-size=200M. وإن كنت تستخدم Docker فإن docker system df يعرض المساحة التي تشغلها الصور والحاويات، وdocker stats --no-stream يعرض مقدار CPU والذاكرة الذي تستخدمه كل حاوية.
العَرَض والسبب المحتمل والحل
| العَرَض | السبب المحتمل | ما العمل |
|---|---|---|
| الصفحات بطيئة بين حين وآخر، وavailable منخفض، وswap ممتلئ | RAM غير كافية | أوقف الخدمات التي لا تحتاج إليها وقلّص إعدادات ذاكرة التطبيق (مثل عدد عمال PHP-FPM أو ذاكرة قاعدة البيانات). وإن لم يكفِ فارفع حجم الخادم. |
تُغلق خدمة من تلقاء نفسها، وتظهر "killed process" في مخرجات dmesg | نفدت الذاكرة وتدخل OOM killer | أضف RAM أو قلّل استخدام الذاكرة. |
عملية واحدة في top تشغل نواة كاملة باستمرار | عملية عالقة أو إضافة معيبة أو حلقة | اعثر على العملية، ثم أصلح التطبيق أو الإضافة وراءها أو عطّله. |
| الحمل مرتفع، وCPU خامل، وwa مرتفع | القرص هو ما يُنتظر (كتابة كثيفة أو swap) | انظر إلى العمودين si وso في vmstat 1 5. وإذا كان swap مستخدمًا فأضف RAM. |
df -h أو df -i ممتلئ | نفدت مساحة القرص أو inodes | نظّف الملفات الكبيرة والسجلات. وإن بقي يمتلئ فارفع الحجم. |
| st يبقى مرتفعًا | قد تكون المشكلة خارج خادمك | تواصل مع الدعم. |
في Seturack سرعة قرص كل خادم محدودة: قراءة مستمرة بسرعة 500 MB/s و20,000 IOPS، وكتابة بسرعة 200 MB/s و8,000 IOPS. فإذا بلغت قيمك في مخرجات iostat -x 1 5 هذه الأرقام فحمل القرص هو ما يبطئك. قلّل العمل بالتخزين المؤقت أو وزّعه على الزمن. وإن لم يكن iostat موجودًا فثبّته بالأمر sudo apt install -y sysstat.
متى يفيد swap؟
يستخدم swap القرص بدل RAM. يتيح للخادم تجاوز قفزات الذاكرة القصيرة دون OOM killer، لكنه ليس بسرعة RAM. فإذا بقي si وso في مخرجات vmstat 1 5 أعلى من الصفر فالخادم يكتب إلى swap باستمرار. والحل هو RAM لا swap. وإذا لم يكن لديك swap (لا يطبع swapon --show شيئًا) وأردت تخفيف القفزات فيمكنك إضافة ملف swap بحجم 2 GB. وهذه الأوامر لنظام ملفات ext4:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
إذا بدت الموارد سليمة
إذا بدت RAM وCPU والقرص مريحة، فتحقق من اسم العملية الأولى في top:
- إذا كانت
php-fpmأوapache2أوnginxفي الأعلى فالمشكلة عادةً في الموقع نفسه: إضافة ثقيلة أو غياب التخزين المؤقت أو قفزة مفاجئة في الزوار. - إذا كانت
mysqldأوmariadbdفي الأعلى فهناك استعلامات بطيئة. فعّل سجل الاستعلامات البطيئة في قاعدة البيانات وانظر أي الاستعلامات تطول. - إذا ظلت عملية لا تعرفها تلتهم CPU فقد يكون الخادم مخترقًا. غيّر كلمات مرورك، وافحص الجلسات المفتوحة ومخرجات
sudo ss -tulpn، وأعد تثبيت الخادم بنظام نظيف إن لزم.
متى ترفع الحجم
الترتيب هو: اضبط أولًا، ثم أضف التخزين المؤقت، ثم أوقف العمل غير اللازم. فإذا بقي الحمل مرتفعًا بعد ذلك فارفع حجم الخادم. في اللوحة افتح تبويب الحجم لخادمك، وحرّك المنزلقات إلى الحجم الجديد وأكّد. وبعد الدفع يعيد الخادم تشغيل نفسه مرة واحدة ويعود بالحجم الجديد. يبقى عنوان IP وبياناتك كما هي، وتدفع فقط الفرق عن الأيام المتبقية. ويمكنك تكبير RAM وvCore والقرص كلًّا على حدة، فترفع فقط ما ينقصك. رفع الحجم يكبّر القرص، أما خفضه فلا يصغّره. وللتفاصيل راجع مقالة تغيير الحجم.
إذا لم يستجب الخادم إطلاقًا بسبب الحمل فقد لا يتصل SSH. في هذه الحالة افتح وحدة تحكم VNC من اللوحة، أو أعد تشغيل الخادم من اللوحة.
التعليقات0
لا توجد تعليقات بعد
كن أول من يشارك رأيه.
يرجى تسجيل الدخول أو إنشاء حساب لترك تعليق.