خطوات الاستخدام
1. قم بإدخال عدد أنوية وحدة المعالجة المركزية (CPU Cores) المتوفرة في خادمك. هذا الرقم يمكن الحصول عليه عن طريق تنفيذ الأمر `nproc` أو `grep -c processor /proc/cpuinfo` في نظام لينكس. عدد الأنوية يحدد قدرة الخادم على معالجة المهام المتزامنة، وهو أساس حساب عدد عمليات العمال.
2. حدد ما إذا كان خادمك يعمل بشكل مكثف في عمليات الإدخال/الإخراج (IO-intensive). إذا كان خادمك يقوم بخدمة عدد كبير من الطلبات التي تنتظر موارد مثل القرص الصلب أو الشبكة (مثل خوادم الملفات أو قواعد البيانات)، فمن المحتمل أن يكون مكثف IO. خوادم الويب التقليدية التي تخدم صفحات ثابتة غالباً ما تكون مكثفة CPU.
3. يتم حساب العدد الأمثل لعمليات العمال (worker processes) باستخدام القاعدة التالية: - إذا كان الخادم غير مكثف IO (أي مكثف CPU): worker_processes = عدد الأنوية. - إذا كان الخادم مكثف IO: worker_processes = عدد الأنوية × 2. هذه القاعدة مستندة إلى أن عمليات العمال الإضافية تستفيد من فترات انتظار الإدخال/الإخراج لمعالجة طلبات أخرى. تُخرج الحاسبة مع عدد العمال: عدد الأنوية، ومعامل الضرب المستعمل (1 أو 2)، والسعة الافتراضية عند 1024 اتصالاً لكل عامل.
4. للحصول على أداء أفضل، يمكنك ضبط القيمة يدوياً بعد الاختبار. يُنصح بمراقبة استخدام وحدة المعالجة المركزية ووقت الاستجابة تحت الحمل، وتعديل العدد تدريجياً. أيضاً، يجب ضبط `worker_connections` بشكل متناسب مع `worker_processes` لتحقيق أقصى استفادة.
أمثلة محلولة
تطبيقات عملية على عمال Nginx الأمثل بخطوات الحل كاملة.
الحل
بما أن الخادم ليس IO-intensive، فإن العدد الأمثل لعمليات العمال هو عدد الأنوية = 4. هذا يعني أن Nginx سيقوم بتشغيل 4 عمليات، كل منها يمكنه معالجة الطلبات بشكل متوازي على نواة منفصلة. هذا يقلل من تبديل السياق (context switching) ويزيد الكفاءة. في هذا السيناريو، يُفترض أن كل عملية تستطيع معالجة عدد كبير من الاتصالات المتزامنة (اعتماداً على `worker_connections`). للتأكد من الأداء الأمثل، يمكنك ضبط `worker_connections` على 1024 (القيمة الافتراضية) أو أكثر، حسب الذاكرة المتاحة.
الحل
بما أن الخادم IO-intensive، فإن العدد الأمثل هو عدد الأنوية × 2 = 16 عملية. في هذا النوع من التطبيقات، تقضي العمليات جزءاً كبيراً من وقتها في انتظار ردود من الخوادم الخلفية (IO). استخدام عدد أكبر من العمليات يسمح لـ Nginx بمعالجة طلبات أخرى أثناء انتظار الردود. مع 16 عملية، يمكن توزيع الحمل بشكل أفضل وتقليل أوقات الانتظار. يجب أيضاً زيادة `worker_connections` لاستيعاب العدد الكبير من الطلبات. على سبيل المثال، إذا كان العدد الإجمالي للاتصالات المتوقعة 16000، يمكن تعيين `worker_connections` = 16000 / 16 = 1000.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة عمال Nginx الأمثل.
مرجع — خادم صفحات ثابتة بأربع أنوية
- عدد أنوية المعالج
- 4
- مكثف للإدخال والإخراج
- لا
مرجع — وكيل عكسي بثماني أنوية
- عدد أنوية المعالج
- 8
- مكثف للإدخال والإخراج
- نعم
مرجع — نواة واحدة
- عدد أنوية المعالج
- 1
- مكثف للإدخال والإخراج
- لا
مرجع — خادم بمئة نواة مكثف IO
- عدد أنوية المعالج
- 100
- مكثف للإدخال والإخراج
- نعم