كيفية إضافة مساحة Swap ومراقبة السيرفر (المعالج، الذاكرة RAM، القرص، الحمل)
لإضافة مساحة Swap على سيرفر Ubuntu، أنشئ ملف Swap باستخدام fallocate، ثم أمّنه باستخدام chmod 600، وهيّئه باستخدام mkswap، وفعّله باستخدام swapon، ثم أضفه إلى /etc/fstab ليظل مفعّلًا بعد إعادة التشغيل. ولمراقبة السيرفر، استخدم uptime لمتابعة الحمل، وfree -h وhtop لمتابعة الذاكرة RAM والمعالج، وdf -h وdu لمتابعة القرص، وiostat وvmstat وjournalctl لإجراء فحوصات أعمق. أضف أيضًا أداة خارجية لمراقبة نسبة التشغيل، وسكربت cron يرسل لك بريدًا إلكترونيًا عندما يقترب القرص من الامتلاء. ينطبق هذا الشرح على VPS السحابي والسيرفرات المخصصة التي تعمل بنظام Ubuntu 24.04 أو 22.04 مع صلاحية الوصول عبر SSH بحساب root.
المتطلبات المسبقة
- VPS سحابي أو سيرفر مخصص يعمل بنظام Ubuntu 24.04 أو 22.04.
- وصول عبر SSH بحساب root أو بمستخدم لديه صلاحية
sudo. - مساحة فارغة على القرص لا تقل عن بضعة جيجابايت لملف Swap.
- عنوان بريد إلكتروني لاستقبال التنبيهات.
1. متى يحتاج الـ VPS إلى Swap؟
الـ Swap هو مساحة على القرص تستخدمها النواة عند نفاد الذاكرة RAM. وهو أبطأ بكثير من الذاكرة RAM، لكنه يمنع الارتفاعات المؤقتة في استهلاك الذاكرة من تشغيل OOM killer (أداة إنهاء العمليات عند نفاد الذاكرة). ومن أمثلة هذه الارتفاعات تنفيذ composer install، أو أخذ نسخة احتياطية من قاعدة البيانات، أو تشغيل workflow ثقيل في n8n. تستفيد باقات VPS الصغيرة (من 1 إلى 4 جيجابايت RAM) من الـ Swap في أغلب الحالات، وكثيرًا ما تأتي صور Ubuntu السحابية بدون Swap. تحقق مما هو متوفر لديك:
sudo swapon --show
free -h
إذا لم يطبع الأمر swapon --show أي شيء، فالسيرفر لا يحتوي على Swap. الحجم العملي هو 1–2 جيجابايت للسيرفرات التي تصل ذاكرتها إلى 2 جيجابايت RAM، و2–4 جيجابايت للسيرفرات الأكبر. وإذا كان السيرفر يستخدم الـ Swap بشكل مستمر، فهو يحتاج إلى ذاكرة RAM أكبر، لا إلى Swap أكبر.
2. كيف أنشئ ملف Swap على Ubuntu؟
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
إذا أفاد الأمر swapon بأن الملف يحتوي على فجوات (holes)، أو فشل fallocate على نظام الملفات لديك، فاحذف الملف. ثم أنشئه باستخدام dd بدلًا منه، وكرر خطوات chmod وmkswap وswapon:
sudo rm /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
ضبط قيمة swappiness
يتحكم الإعداد vm.swappiness في مدى سرعة النواة في نقل محتوى الذاكرة إلى الـ Swap. القيمة الافتراضية في Ubuntu هي 60. أما على السيرفرات، فالقيمة 10 تُبقي البيانات النشطة في الذاكرة RAM وتجعل الـ Swap شبكة أمان في المقام الأول. طبّق القيمة الجديدة واجعلها دائمة:
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system
3. كيف أتحقق من المعالج والذاكرة RAM ومتوسط الحمل؟
uptime
nproc
يطبع الأمر uptime ثلاث قيم لمتوسط الحمل خلال آخر 1 و5 و15 دقيقة. الحمل هو عدد العمليات التي تعمل حاليًا أو تنتظر المعالج أو القرص. قارن هذه القيم بعدد الأنوية الذي يعرضه nproc. على سيرفر بنواتين، يعني الحمل الذي يقارب 2 أن المعالج مشغول بالكامل، ويعني الحمل المستمر عند 4 أو أكثر أن العمليات تنتظر في طابور.
sudo apt update && sudo apt install -y htop sysstat
htop
free -h
في htop، اضغط F6 للترتيب حسب PERCENT_MEM أو PERCENT_CPU، واضغط q للخروج. وفي free -h، انظر إلى العمود available وليس free، لأن Linux يستخدم الذاكرة RAM غير المستغلة كذاكرة مؤقتة (cache)، ثم يحررها عندما تحتاجها التطبيقات.
معرفة ما يستهلك الذاكرة
ps aux --sort=-%mem | head -n 10
docker stats --no-stream
استخدم docker stats عندما تعمل تطبيقاتك داخل حاويات (containers)، كما هو الحال مثلًا في استضافة n8n.
فحص عمليات القراءة والكتابة على القرص وضغط الذاكرة
vmstat 2 5
iostat -xz 2 3
توضح لك هذه الأعمدة موضع الاختناق:
- في
vmstat، تعني القيم الثابتة غير الصفرية فيsi/soأن السيرفر يستخدم الـ Swap بشكل فعلي ويحتاج إلى ذاكرة RAM أكبر. - تعني القيمة المرتفعة في العمود
waضمنvmstatأن المعالج ينتظر القرص. - في
iostat، تشير قيمة%utilالقريبة من 100 إلى أن القرص مشبّع.
4. كيف أعرف ما يستهلك مساحة القرص؟
df -h
df -i
sudo du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -n 15
sudo du -sh /var/log/* | sort -h | tail
استخدم المخرجات على النحو التالي:
- يعرض
df -hالاستخدام لكل نظام ملفات. - يعرض
df -iالـ inodes. قد تنفد الـ inodes حتى مع وجود مساحة فارغة، وغالبًا ما يحدث ذلك بسبب ملايين الملفات الصغيرة الخاصة بالذاكرة المؤقتة أو الجلسات. - كرر تشغيل
duعلى أكبر مجلد حتى تصل إلى مصدر المشكلة.
5. كيف أراجع سجلات الخدمات باستخدام journalctl؟
systemctl status nginx
sudo journalctl -u nginx --since "1 hour ago"
sudo journalctl -p err -b
sudo journalctl -f
sudo journalctl --disk-usage
تؤدي هذه الأوامر ما يلي:
- يُصفّي الخيار
-uالسجلات حسب الخدمة. استبدلnginxباسم خدمتك، مثلmysqlأوphp8.3-fpmأوdocker. - يعرض الخيار
-p err -bالأخطاء منذ آخر تشغيل للسيرفر. - يتابع الخيار
-fأسطر السجل الجديدة لحظة بلحظة. - يعرض الخيار
--disk-usageالمساحة التي يشغلها الـ journal.
6. كيف أتلقى تنبيهًا عند توقف السيرفر أو الموقع؟
لا يستطيع السيرفر الإبلاغ عن توقفه بنفسه، لذا استخدم أداة مراقبة خارجية. يمكن لخدمة UptimeRobot أو أي خدمة مشابهة فحص موقعك عبر HTTP(S) ضمن الخطة المجانية، عادةً كل 5 دقائق، وإرسال بريد إلكتروني إليك عند حدوث عطل.
- أنشئ أداة مراقبة HTTP(S) واحدة للعنوان
https://example.com. - يمكنك اختياريًا إضافة مراقبة بالكلمات المفتاحية تتحقق من وجود نص معين في الصفحة، وهي تكشف صفحات الخطأ التي تُرجع الرمز 200 رغم ذلك.
- يمكنك اختياريًا إضافة مراقبة ping للعنوان
203.0.113.10.
لمراجعة أعمق للأداء واختناقات الموارد والإعدادات، تقدم Cloudesta خدمة تحليل مراقبة السيرفر (Server Monitoring Analysis). افتح تذكرة دعم لطلبها.
7. كيف أتلقى تنبيهات بالبريد الإلكتروني عندما يقترب القرص من الامتلاء؟
أولًا، ثبّت أداة لإرسال البريد. عند السؤال، اختر "Internet Site" وأدخل اسم المضيف (hostname) الخاص بالسيرفر:
sudo apt install -y mailutils
بعد ذلك، أنشئ السكربت /usr/local/bin/disk-alert.sh:
#!/bin/bash
THRESHOLD=85
EMAIL="you@example.com"
HOST=$(hostname)
df -P -x tmpfs -x devtmpfs -x squashfs -x overlay | awk 'NR>1 {gsub("%","",$5); print $5, $6}' |
while read -r USAGE MOUNT; do
if [ "$USAGE" -ge "$THRESHOLD" ]; then
echo "Disk usage on $HOST: $MOUNT is at ${USAGE}%" | mail -s "Disk alert: $HOST $MOUNT ${USAGE}%" "$EMAIL"
fi
done
اجعل السكربت قابلًا للتنفيذ وجدوله ليعمل كل ساعة:
sudo chmod 755 /usr/local/bin/disk-alert.sh
sudo crontab -e
في المحرر، أضف هذا السطر:
0 * * * * /usr/local/bin/disk-alert.sh
التحقق من نجاح الإعداد
- يعرض الأمر
sudo swapon --showالملف/swapfile، ويُظهرfree -hمساحة الـ Swap. - يُرجع الأمر
cat /proc/sys/vm/swappinessالقيمة10. - بعد تنفيذ
sudo reboot، يظل الـ Swap مفعّلًا. - اضبط مؤقتًا
THRESHOLD=1وشغّلsudo /usr/local/bin/disk-alert.sh، ومن المفترض أن تصلك رسالة بريد إلكتروني. تحقق من مجلد الرسائل غير المرغوب فيها ومنsudo tail /var/log/mail.log. ثم أعد الحد إلى85. - تُظهر أداة المراقبة الخارجية أن الموقع في حالة "up".
المشكلات الشائعة
امتلاء القرص بسبب السجلات
قلّص حجم الـ journal، وأفرغ ملف السجل كبير الحجم في مكانه، وابحث عن الملفات المحذوفة التي لا تزال عملية قيد التشغيل تبقيها مفتوحة:
sudo journalctl --vacuum-size=200M
sudo truncate -s 0 /var/log/example.log
sudo lsof +L1
أعد تشغيل الخدمة المالكة لأي ملف يظهر في نتائج lsof +L1 لتحرير المساحة. ولإبقاء حجم الـ journal صغيرًا بشكل دائم، اضبط SystemMaxUse=200M في الملف /etc/systemd/journald.conf ثم أعد تشغيل systemd-journald.
توقف الخدمات بشكل عشوائي (OOM killer)
تأكد من أن النواة هي التي أنهتها:
sudo journalctl -k | grep -iE "out of memory|killed process"
إذا ظهرت نتائج مطابقة، فأضف Swap وقلّل عدد العمليات العاملة (pm.max_children في PHP-FPM، والـ buffers في MySQL). وإذا ظلت الذاكرة غير كافية، فافتح تذكرة لترقية الباقة.
ارتفاع الحمل بسبب البوتات أو برامج الزحف
اعرف عناوين IP التي ترسل أكبر عدد من الطلبات:
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
sudo ufw deny from 198.51.100.25
احظر عناوين IP المسيئة باستخدام ufw كما هو موضح. وقيّد معدل الطلبات أو احظر الـ user agents العدوانية من إعدادات سيرفر الويب.
ارتفاع الحمل بسبب تكرار مهمة cron
شغّل ps -ef --forest للبحث عن نسخ متعددة من السكربت نفسه، وراجع الجداول الزمنية باستخدام crontab -l وsudo crontab -l. ولمنع تداخل مرات التشغيل، شغّل المهمة من خلال flock:
*/5 * * * * /usr/bin/flock -n /tmp/job.lock /usr/local/bin/job.sh
اختفاء الـ Swap بعد إعادة التشغيل
راجع الملف /etc/fstab بحثًا عن أخطاء كتابية، ثم شغّل sudo swapon -a. إذا ظهر خطأ، فأصلح السطر المعني. ولا تترك أبدًا سطرًا معطوبًا في fstab.
الأسئلة الشائعة
ما حجم الـ Swap الذي يجب إضافته إلى الـ VPS؟
استخدم 1–2 جيجابايت للسيرفرات التي تصل ذاكرتها إلى 2 جيجابايت RAM، و2–4 جيجابايت للسيرفرات الأكبر. يقتصر دور الـ Swap على امتصاص الارتفاعات المؤقتة، لذا فإن الاستخدام المستمر له يعني أنك تحتاج إلى ذاكرة RAM أكبر.
هل يمكنني إضافة Swap على استضافة cPanel المشتركة؟
لا. يدير CloudLinux الذاكرة في الاستضافة المشتركة لكل حساب على حدة. افتح تذكرة دعم لترقية باقتك إذا كنت تصل إلى الحدود باستمرار.
هل متوسط حمل يساوي 3 أمر سيئ؟
يعتمد ذلك على عدد الأنوية. على سيرفر بأربع أنوية يكون الوضع طبيعيًا، أما على سيرفر بنواة واحدة فالعمليات تنتظر في طابور، وعليك البحث عن السبب في htop.
تحتاج إلى مساعدة؟ افتح تذكرة عبر https://cloudesta.com/submitticket.php وأرفق مخرجات uptime وfree -h وdf -h.