Skip to content
🚀 20% OFF for new customers on Linux and Windows servers! Code: ILK20  |  Order Now →
build حل المشكلات والأتمتة

تحذير max_children في PHP-FPM والحل النهائي

إذا كنت تتلقى تحذير max_children في PHP-FPM، أشرح في هذه المقالة السبب وكيفية حله بشكل نهائي خطوة بخطوة. احسب موارد الخادم لديك بشكل واقعي.

person
Editör
(تم التحديث: 10 سبتمبر 2026) schedule 3 دقيقة قراءة visibility 12 مشاهدة

إذا كنت تستخدم PHP-FPM على خادمك، فربما واجهت هذا التحذير خاصة عند زيادة حركة المرور: “WARNING: [pool www] seems busy (you may need to increase pm.start_servers, pm.min_spare_servers, pm.max_spare_servers, or pm.max_children)”. هذا التحذير هو موضوع يُساء فهم حله غالبًا. ولأنني أتلقى الكثير من الأسئلة حوله في HostingServer.com.tr، رأيت ضرورة كتابة هذا المقال. بدلاً من مجرد زيادة قيمة max_children، سنحسب احتياجك الفعلي ونقدم حلاً دائماً.

لماذا يظهر هذا التحذير؟

يقوم PHP-FPM بإنشاء عملية child منفصلة لكل طلب. تحدد pm.max_children الحد الأقصى لعدد العمليات التي يمكن أن تعمل في وقت واحد. عند الوصول إلى هذه القيمة، تُوضع الطلبات الجديدة في قائمة انتظار حتى تفرغ العمليات. إذا زاد عدد الطلبات المنتظرة بشكل كبير، يتباطأ الخادم وتظهر أخطاء. الإعدادات الافتراضية غالباً ما تكون غير كافية. على سبيل المثال، في خادم افتراضي من DigitalOcean بسعة 2 جيجابايت RAM، تكون max_children الافتراضية عادة بين 5-10. ولكن إذا كان لديك 30-40 زائراً في نفس الوقت، فهذه القيمة منخفضة جداً.

الحل النهائي: حساب الموارد

لإيجاد قيمة max_children الصحيحة، يجب معرفة مقدار RAM الذي تستهلكه كل عملية PHP-FPM. يمكنك معرفة ذلك باستخدام الأمر التالي: ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%dMB", sum/1024) }'. يعطي هذا الأمر إجمالي استخدام RAM لجميع عمليات PHP-FPM بالميغابايت. ثم اقسمه على عدد العمليات لتحصل على متوسط استهلاك الذاكرة لكل عملية. على سبيل المثال، إذا كانت 10 عمليات تستهلك 512 ميغابايت، فكل عملية تستهلك حوالي 51 ميغابايت. تذكر أن هناك خدمات أخرى تعمل على الخادم. اترك هامش أمان وخصص 80% من إجمالي RAM لـ PHP-FPM. 80% من 2 جيجابايت = 1.6 جيجابايت = 1638 ميغابايت. 1638 / 51 ≈ 32. إذن max_children = 32. كذلك، اضبط قيم pm.max_spare_servers و pm.min_spare_servers بناءً على ذلك. أقترح: min_spare = 5، max_spare = 15.

طريقة بديلة: قياس pm.status

طريقة أخرى هي فتح صفحة pm.status ومشاهدة البيانات المباشرة. قم بتعيين pm.status_path = /status ثم استخدم curl http://localhost/status?full لرؤية عدد العمليات الحالي والطلبات المنتظرة (queue). إذا كان ‘listen queue’ دائمًا أكبر من صفر، فيجب زيادة max_children. لكن انتبه، مجرد الزيادة لا يكفي؛ إذا بدأ الخادم في استخدام swap، فهذا يعني أن RAM غير كافية. عندها، إما قم بزيادة RAM أو قم بتحسين تطبيقك.

تغيير إعدادات PHP-FPM

لتغيير الإعدادات، قم بتحرير الملف /etc/php/8.x/fpm/pool.d/www.conf. القيم الافتراضية هي: pm = dynamic, pm.max_children = 5, pm.start_servers = 2, pm.min_spare_servers = 1, pm.max_spare_servers = 3. اكتب القيم التي حسبتها وأعد تشغيل الخدمة: systemctl restart php8.2-fpm (يختلف حسب الإصدار). راقب لمدة يوم، إذا تكرر التحذير، قم بإعادة الحساب.

أشياء يجب تذكرها

  • لا تستهلك كل عملية نفس الذاكرة، يعتمد ذلك على تطبيقك. موقع WordPress قد يستهلك 30 ميغابايت، بينما Magento قد يستهلك 100 ميغابايت.
  • الخدمات الأخرى مثل MySQL و Nginx و Redis تستهلك أيضاً ذاكرة. ضعها في الاعتبار.
  • تجنب استخدام swap؛ فالاستخدام المفرط لل swap يضعف الأداء.
هام: ضبط max_children بقيمة عالية جداً قد يؤدي إلى انهيار الخادم. قم دائماً بالزيادة بشكل تدريجي مع الاحتياط والمراقبة.

الخلاصة

تحذير max_children في PHP-FPM إذا تم إهماله قد يفسد تجربة المستخدم. لكن حله بالطريقة الصحيحة ليس بالصعوبة التي يتصورها البعض. قم بقياس موارد خادمك، احسب بدقة، واضبط الإعدادات وفقاً لذلك. في HostingServer.com.tr ستجد المزيد من المحتوى حول هذا الموضوع، ويمكنك طرح أسئلتك في التعليقات. سأتناول في المقال القادم موضوع المراقبة المباشرة باستخدام pm.status.

شارك هذه المقالة

مشاركة LinkedIn WhatsApp

مقالات ذات صلة