تحسين أداء VPS: 10 خطوات فعّالة

من kernel tuning لتحسين MySQL لضبط Nginx — 10 خطوات ترفع أداء VPS بدون ما تترقى. أوامر جاهزة للنسخ.
لماذا تحسين الأداء مهم؟
VPS بمواصفات ممتازة قد يعمل ببطء إذا لم يُضبط بشكل صحيح. التحسين لا يعني شراء موارد أكثر — بل استغلال الموارد الحالية بأقصى كفاءة. هذا الدليل يغطي تحسينات عملية ومجربة تقدر تطبقها الآن.
تشخيص المشكلة أولاً
قبل أي تحسين، حدد أين عنق الزجاجة (bottleneck). الأسباب الأربعة الرئيسية لبطء VPS:
| السبب | كيف تكشفه | الحل |
|---|---|---|
| نقص المعالج | load average أعلى من عدد الأنوية | تحسين الكود أو إضافة vCPU |
| نقص الذاكرة | swap مستخدم بشكل مستمر | تحسين الاستهلاك أو إضافة RAM |
| بطء القرص | iowait مرتفع في top | تحسين الاستعلامات أو ترقية لـ SSD |
| بطء الشبكة | زمن استجابة عالي | تحسين الإعدادات أو اختيار موقع أقرب |
أوامر التشخيص الأساسية
- htop — عرض شامل للمعالج والذاكرة والعمليات
- iostat -x 5 — أداء القرص كل 5 ثوانٍ
- vmstat 5 — إحصائيات الذاكرة والمعالج
- ss -tuln — الاتصالات النشطة والمنافذ المفتوحة
- dmesg | tail — آخر رسائل النواة (أخطاء عتاد أو ذاكرة)
تحسين نظام التشغيل
1. إعدادات النواة (Kernel Tuning)
إعدادات sysctl الموصى بها لسيرفرات الويب:
| الإعداد | القيمة الموصى بها | الوظيفة |
|---|---|---|
| net.core.somaxconn | 65535 | الحد الأقصى لقائمة الاتصالات المعلقة |
| net.ipv4.tcp_max_syn_backlog | 65535 | حماية من SYN flood |
| vm.swappiness | 10 | تقليل استخدام swap |
| net.ipv4.tcp_fin_timeout | 15 | تسريع تحرير الاتصالات المغلقة |
| net.ipv4.tcp_tw_reuse | 1 | إعادة استخدام اتصالات TIME_WAIT |
| fs.file-max | 2097152 | الحد الأقصى للملفات المفتوحة |
2. تعطيل الخدمات غير الضرورية
كل خدمة تعمل في الخلفية تستهلك ذاكرة ومعالج. عطّل ما لا تحتاجه:
- snapd (إذا لم تستخدم snap packages)
- postfix (إذا لم يكن السيرفر يرسل بريد)
- ModemManager (غير مطلوب على سيرفر)
- bluetooth (غير مطلوب على سيرفر)
3. استخدام tmpfs
انقل الملفات المؤقتة للذاكرة بدل القرص. مجلدات مثل /tmp و/var/run تعمل أسرع كثيراً في الذاكرة.
تحسين خادم الويب
Nginx (الخيار الأفضل لمعظم التطبيقات)
Nginx أخف وأسرع من Apache في التعامل مع الاتصالات المتزامنة. إعدادات أساسية:
| الإعداد | القيمة الموصى بها | السبب |
|---|---|---|
| worker_processes | auto | نواة لكل worker |
| worker_connections | 2048 | اتصالات متزامنة لكل worker |
| keepalive_timeout | 30 | تقليل اتصالات جديدة |
| gzip | on | ضغط المحتوى النصي |
| sendfile | on | نقل ملفات أسرع |
| tcp_nopush | on | تحسين إرسال الحزم |
ضغط Gzip
فعّل الضغط لتقليل حجم البيانات المنقولة بنسبة 60-80%:
- text/html, text/css, application/javascript
- application/json, application/xml
- ضع مستوى الضغط على 6 (توازن بين الضغط واستهلاك المعالج)
تحسين PHP
إذا تطبيقك يعمل بـ PHP (Laravel، your website، أو غيرها):
OPcache
OPcache يخزن PHP المُترجم في الذاكرة. بدونه، كل طلب يُعيد ترجمة الملفات من الصفر.
| الإعداد | القيمة الموصى بها |
|---|---|
| opcache.enable | 1 |
| opcache.memory_consumption | 256 |
| opcache.max_accelerated_files | 20000 |
| opcache.validate_timestamps | 0 (في الإنتاج) |
PHP-FPM
| الإعداد | القيمة لـ 4GB RAM |
|---|---|
| pm | dynamic |
| pm.max_children | 30 |
| pm.start_servers | 5 |
| pm.min_spare_servers | 3 |
| pm.max_spare_servers | 10 |
قاعدة الحساب: pm.max_children = (الذاكرة المتاحة لـ PHP) / (متوسط استهلاك العملية الواحدة). عملية PHP تستهلك عادة 30-60MB.
تحسين قاعدة البيانات
MySQL/MariaDB
| الإعداد | القيمة الموصى بها لـ 8GB RAM | الوظيفة |
|---|---|---|
| innodb_buffer_pool_size | 4G (50% من RAM) | ذاكرة تخزين مؤقت للبيانات |
| innodb_log_file_size | 512M | حجم ملف السجل |
| innodb_flush_log_at_trx_commit | 2 | تسريع الكتابة (أقل أماناً بقليل) |
| query_cache_type | OFF (MySQL 8) | MySQL 8 ألغى query cache |
| max_connections | 200 | حسب الحاجة الفعلية |
فهارس قاعدة البيانات
الاستعلامات البطيئة غالباً بسبب فهارس مفقودة. فعّل slow query log وراجع الاستعلامات التي تأخذ أكثر من ثانية واحدة. أضف فهارس على الأعمدة المستخدمة في WHERE وJOIN وORDER BY.
التخزين المؤقت (Caching)
مستويات التخزين المؤقت
| المستوى | الأداة | التأثير |
|---|---|---|
| المتصفح | Cache-Control headers | يقلل الطلبات 40-60% |
| CDN | Cloudflare / أي CDN | يقلل الحمل على السيرفر 50-80% |
| التطبيق | Redis / Memcached | يسرّع الاستعلامات 10-100x |
| صفحة كاملة | Varnish / Nginx cache | يسرّع الصفحات الثابتة 50-200x |
| PHP | OPcache | يسرّع تنفيذ PHP 3-5x |
Redis
Redis يخزن البيانات في الذاكرة. مثالي لـ:
- جلسات المستخدمين (sessions)
- نتائج الاستعلامات المتكررة
- قوائم الانتظار (queues)
- العدادات والإحصائيات اللحظية
خطة التحسين المرحلية
| المرحلة | التحسين | التأثير المتوقع |
|---|---|---|
| 1 | تفعيل OPcache + ضبط PHP-FPM | تسريع 2-3x |
| 2 | تحسين إعدادات MySQL | تسريع الاستعلامات 3-5x |
| 3 | إضافة Redis للتخزين المؤقت | تقليل حمل قاعدة البيانات 50-80% |
| 4 | ضبط Nginx + ضغط Gzip | تقليل النطاق 60-80% |
| 5 | تفعيل CDN | تقليل الحمل 50-80% |
متى تحتاج ترقية الموارد فعلاً
بعد تطبيق كل التحسينات أعلاه، إذا:
- المعالج فوق 80% بشكل مستمر
- الذاكرة ممتلئة بدون swap
- القرص بطيء رغم التحسينات
عندها الترقية منطقية. في كلاود (cloud.net.sa)، إضافة الموارد فورية: +1 vCPU بـ 500 ريال/سنة، +2GB RAM بـ 600 ريال/سنة. لكن ابدأ بالتحسين دائماً قبل الشراء — 80% من مشاكل الأداء حلها في الإعدادات وليس الموارد.
ابدأ الآن
تبي تجرب بنفسك؟ اختر باقة الاستضافة المناسبة أو صمم سيرفرك الخاص بالمواصفات اللي تبيها.
