العودة إلى المدونة

متى تحتاج إلى ترقية خادم VPS؟ قراءة مؤشرات المعالج والذاكرة والقرص

فريق تحرير IM Host25 أكتوبر 20267 دقائق قراءة
متى تحتاج إلى ترقية خادم VPS؟ قراءة مؤشرات المعالج والذاكرة والقرص

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

تعمل الأوامر التالية على التوزيعات الشائعة مثل Ubuntu وDebian وAlmaLinux وRocky Linux. بعضها يحتاج إلى حزمة sysstat التي توفّر الأدوات iostat وmpstat وpidstat وsar.

# Debian / Ubuntu
sudo apt install sysstat
# AlmaLinux / Rocky Linux
sudo dnf install sysstat

قِس على مدى زمني لا مرة واحدة

نظرة واحدة إلى top أثناء تشغيل نسخة احتياطية لا تخبرك بشيء عن يوم عادي. راقب الخادم في أوقات الحركة المعتادة، وفي أوقات الذروة، وأثناء المهام المجدولة. إذا فعّلت جمع البيانات عبر sudo systemctl enable --now sysstat (وفي Debian وUbuntu اضبط أيضًا ENABLED="true" في الملف /etc/default/sysstat)، فسيحتفظ sar بسجل يمكنك مراجعته لاحقًا: sar -u للمعالج، وsar -r للذاكرة، وsar -d للأقراص. سجل أسبوع كامل أساس أفضل بكثير لقرار الترقية من ساعة سيئة واحدة.

المعالج: قارن متوسط الحمل بعدد الأنوية

متوسط الحمل (load average) هو متوسط عدد المهام التي تعمل أو تنتظر دورها في التشغيل خلال 1 و5 و15 دقيقة. الرقم وحده لا يعني الكثير، لذا قارنه بعدد الأنوية:

nproc
uptime
# 14:02:11 up 12 days,  3:41,  1 user,  load average: 3.85, 3.62, 3.40

على خادم VPS بأربع أنوية، يعني حمل 3.4 خلال 15 دقيقة أن المعالج مشغول لكنه يواكب العمل. وكقاعدة تقريبية، إذا ظل متوسط الـ15 دقيقة أعلى من عدد الأنوية خلال الساعات العادية، فالمهام تتكدّس في الطابور وسيشعر المستخدمون بذلك. أما القفزات القصيرة فوق هذا الحد فأمر طبيعي.

لكن هناك تفصيلة مهمة: في لينكس يحتسب متوسط الحمل أيضًا المهام التي تنتظر القرص (الحالة D غير القابلة للمقاطعة). لذلك فالحمل المرتفع مع معالج شبه خامل يشير غالبًا إلى التخزين لا إلى المعالج. تحقّق من أين يذهب الوقت فعلًا:

mpstat -P ALL 5 3

إذا كانت %usr و%sys مرتفعة على جميع الأنوية، فالمعالج هو الحد. وإذا كانت نواة واحدة عند 100% والباقي خاملًا، فالتطبيق يعمل بخيط واحد: زيادة الأنوية لن تفيد، وقد يفيد معالج أسرع. وإذا كانت %iowait مرتفعة، فانتقل إلى قسم القرص أدناه.

وقت السرقة (steal time): حين تكون المشكلة خارج خادمك

في الخادم الافتراضي، وقت السرقة (العمود st في top وvmstat، و%steal في mpstat) هو الوقت الذي كانت فيه نواتك الافتراضية جاهزة للعمل بينما كان المُشرف الافتراضي (hypervisor) يخدم خادمًا آخر.

vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 5  0      0 412000  52000 980000    0    0    12    40  900 1500 55 10 20  1 14

في هذا المثال قيمة st هي 14، والعمود r (المهام المنتظرة للمعالج) أعلى من عدد الأنوية. وكقاعدة تقريبية، إذا ظل وقت السرقة فوق 5–10% فأنت لا تحصل على وقت المعالج الذي يحتاجه عملك. لا يوجد شيء داخل الخادم يمكنه إصلاح ذلك، وقد لا تفيد إضافة أنوية على الفئة المشتركة نفسها. أما الخطة ذات الأنوية المخصّصة فتحل المشكلة غالبًا، لأن هذه الأنوية لا تُشارَك مع خوادم أخرى.

الذاكرة: اقرأ "available" ثم ابحث عن الضغط

يستخدم لينكس الذاكرة الفائضة كذاكرة تخزين مؤقت للصفحات (page cache)، لذلك تبدو الذاكرة "المستخدمة" مرتفعة دائمًا، وهذا طبيعي وصحي. اقرأ العمود available بدلًا من ذلك:

free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       3.1Gi       120Mi        45Mi       620Mi       410Mi
Swap:          2.0Gi       1.4Gi       600Mi

انخفاض الذاكرة المتاحة تحذير وليس دليلًا. المشكلة الحقيقية هي التبديل النشط مع ذاكرة swap. راقب العمودين si وso في vmstat 5. استخدام swap الثابت لا بأس به، أما القيم غير الصفرية المستمرة في si وso فتعني أن الخادم ينقل صفحات الذاكرة إلى القرص ويعيدها باستمرار، فيتباطأ كل شيء.

توفّر الأنوية (kernels) من الإصدار 4.20 فما فوق معلومات ضغط التوقف (PSI)، وهي تبيّن نسبة الوقت الذي توقفت فيه المهام بانتظار الذاكرة:

cat /proc/pressure/memory
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0

كقاعدة تقريبية، إذا ظلت قيمة some avg60 فوق 10 تقريبًا تحت الحمل العادي، فالذاكرة عنق زجاجة حقيقي. وأوضح علامة على الإطلاق هي OOM killer: حين تنفد ذاكرة النظام، تُنهي النواة إحدى العمليات وتسجّل ذلك:

journalctl -k | grep -i "out of memory"
# Out of memory: Killed process 2314 (mysqld) total-vm:2457800kB, anon-rss:1203400kB ...

قبل الترقية راجع الإعدادات. فحجم ذاكرة قاعدة البيانات (buffer pool)، أو قيمة pm.max_children في PHP-FPM، أو عدد العمّال (workers) إذا ضُبط أعلى مما تسمح به الذاكرة، سيؤدي إلى إنهاء العمليات على أي حجم خطة. أما إذا كانت الإعدادات معقولة واستمر نفاد الذاكرة تحت الحمل العادي، فالخادم يحتاج إلى ذاكرة أكبر.

عمليات القرص: iowait وزمن الاستجابة

%iowait هو الوقت الذي ظل فيه المعالج خاملًا بانتظار القرص. إنه مؤشر غير مباشر وليس قياسًا للقرص نفسه. لرؤية القرص مباشرة استخدم iostat:

iostat -x 5 3

راقب الأعمدة التالية للقرص الرئيسي (غالبًا vda أو sda أو nvme0n1):

  • r_await وw_await: متوسط زمن القراءة والكتابة بالملّي ثانية، بما في ذلك وقت الانتظار في الطابور. على أقراص NVMe، القيم التي تبقى في نطاق عشرات الملّي ثانية علامة تحذير.

  • aqu-sz: متوسط طول الطابور. الطابور الذي يستمر في النمو يعني أن الطلبات تصل أسرع مما يستطيع القرص خدمته.

  • %util: مفيد مع قرص ميكانيكي واحد، لكنه مضلّل مع أقراص NVMe والأقراص الافتراضية لأنها تخدم طلبات كثيرة بالتوازي. لا تتخذ قرارك بناءً على %util وحده.

لمعرفة العملية المسؤولة عن عمليات القرص، شغّل sudo iotop -o أو pidstat -d 5. السبب في الغالب استعلام بلا فهرس مناسب، أو مستوى سجلات تُرك على وضع debug، أو مهمة نسخ احتياطي تعمل وقت الذروة. أصلح هذه أولًا. فإذا كانت عمليات القرص مشروعة وظل زمن الاستجابة مرتفعًا، فأنت تحتاج إلى تخزين أسرع، أو إلى ذاكرة أكبر لتبقى بيانات أكثر في التخزين المؤقت.

مساحة القرص: نسبة الامتلاء ومعدل النمو

df -h
df -i
sudo du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -n 15

يعرض df -i عدد الـinodes. قد يُظهر القرص مساحة فارغة ومع ذلك يفشل بالخطأ No space left on device عندما تنفد الـinodes، وغالبًا بسبب ملايين الملفات الصغيرة الخاصة بالتخزين المؤقت أو الجلسات.

كقاعدة تقريبية، ابدأ التخطيط حين يتجاوز نظام الملفات 80%، وتحرّك قبل أن يصل إلى 90%. تحتاج قواعد البيانات إلى مساحة فارغة للجداول المؤقتة ومهام الصيانة، وقد يُفسد القرص الممتلئ عمليات الكتابة في منتصف معاملة. أماكن شائعة لاستعادة المساحة:

sudo journalctl --vacuum-size=500M
docker system df            # shows what images, containers and volumes use
sudo apt clean              # or: sudo dnf clean all

بعد ذلك قِس معدل النمو. إذا كان الاستخدام يزيد 2 جيجابايت أسبوعيًا وتبقّى 10 جيجابايت، فأمامك نحو خمسة أسابيع. هذا الرقم هو ما يحدد موعد الترقية، لا النسبة الحالية.

تحسين أم ترقية؟

المؤشرتحقّق أولًا منرقِّ عندما
حمل مرتفع و%usr مرتفعةالاستعلامات البطيئة، العمليات الخارجة عن السيطرة، غياب التخزين المؤقتيبقى الحمل أعلى من عدد الأنوية في الحركة العادية بعد الإصلاحات
وقت سرقة مرتفعلا شيء داخل الخادم يصلحهيبقى فوق 5–10%: انتقل إلى أنوية مخصّصة
تبديل swap مستمر أو إنهاء عمليات OOMعدد العمّال وأحجام الذاكرة المؤقتةتنفد الذاكرة رغم أن الإعدادات معقولة
await وiowait مرتفعانالفهارس، مستوى السجلات، توقيت النسخ الاحتياطيعمليات القرص مشروعة وزمن الاستجابة يبقى مرتفعًا
القرص فوق 80%السجلات، النسخ القديمة، صور Docker غير المستخدمةيُظهر معدل النمو أن القرص سيمتلئ خلال أسابيع

ترقية بمخاطر أقل

  1. خذ نسخة احتياطية أو لقطة (snapshot) حديثة قبل أي تغيير في الحجم.

  2. اختر وقتًا هادئًا، فكثير من عمليات تغيير الحجم تحتاج إلى إعادة تشغيل.

  3. بعد ترقية القرص تأكّد أن نظام الملفات توسّع فعلًا. كثير من صور التشغيل السحابية تفعل ذلك تلقائيًا عند الإقلاع، وإن لم يحدث فوسّع القسم ونظام الملفات بالأوامر أدناه.

  4. قارن المؤشرات نفسها بخط الأساس لتتأكد أن الترقية حلّت المشكلة.

lsblk
sudo growpart /dev/vda 1
sudo resize2fs /dev/vda1      # ext4
# sudo xfs_growfs /           # XFS

تختلف أسماء الأقراص والأقسام من خادم لآخر، لذا تأكّد منها عبر lsblk قبل تنفيذ أي أمر.

شغّله على IM HOST

إذا أشارت فحوصاتك إلى حدّ حقيقي في الموارد، فإن Cloud VPS من IM HOST يمنحك أنوية وذاكرة مخصّصة لا تُشارَك مع خوادم أخرى، ويمكنك الترقية في أي وقت مع نمو عملك. تبدأ الخطط من 16 دولارًا شهريًا بأربع أنوية مخصّصة و8 جيجابايت ذاكرة و80 جيجابايت NVMe، وتشمل نسخة احتياطية تلقائية مجانية كل 3 أيام. وللأحمال الأصغر تبدأ خطط Linux VPS من 5 دولارات شهريًا مع صلاحيات root كاملة على KVM. هل تنتقل من مزوّد آخر؟ تشمل خدمة النقل المجاني الملفات وقواعد البيانات والبريد دون توقف، ويمكن لمهندسي الدعم لدينا على مدار الساعة مراجعة الأرقام معك قبل اختيار الخطة.

المزيد من مدونتنا

اكتشف المزيد من الأدلة العملية ورؤى الخدمات من فريق IM Host.

عرض كل المقالات