گلوگاه عملکردی بین Apache و PHP‑FPM و نحوهٔ تنظیم صحیح Child Processها

این مقاله توضیح می‌دهد چرا در سرورهایی که Apache با MPM نوع prefork و PHP‑FPM اجرا می‌شود، ممکن است گلوگاه (Bottleneck) ایجاد شود. همچنین نحوهٔ رفع مشکل با هماهنگ‌سازی تعداد Apache Workers و PHP‑FPM Child Processes را توضیح می‌دهد. در ادامه، یک راهنمای کامل از تنظیمات PHP‑FPM و مقادیر پیش‌فرض آن ارائه شده است.

apache php-fpm performancephp-fpm configuration cpanelprefork mpm bottleneck

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۲۶ بهمن ۱۴۰۴

Apache vs. PHP-FPM Bottleneck with Child Processes


آخرین ویرایش: 11 مارس 2021


Overview

در سرورهایی که Apache با MPM نوع prefork اجرا می‌شود، اگر تعداد Apache Server Instances کمتر از تعداد PHP-FPM Child Processes باشد، ممکن است مشکلات جدی عملکردی ایجاد شود. این مقاله نحوهٔ رفع این مشکل را توضیح می‌دهد.


مشکل چگونه ایجاد می‌شود؟

فرض کنید تنظیمات PHP-FPM اجازهٔ ایجاد 20 Child Process را می‌دهد، اما Apache فقط 5 Server Instance دارد.

نمونهٔ تنظیمات PHP-FPM:


pm_max_children: 20
pm_max_requests: 20

نمونهٔ تنظیمات Apache (prefork MPM):


StartServers: 5
MinSpareServers: 10
MaxSpareServers: 10

اگر Apache هم‌زمان 20 درخواست دریافت کند، فقط 5 پردازشگر دارد و مجبور است درخواست‌ها را به‌صورت دسته‌ای به PHP-FPM ارسال کند. این باعث ایجاد صف، تأخیر و افت شدید عملکرد می‌شود.

هشدار: در سرورهای پرترافیک، این پیکربندی می‌تواند باعث کندی شدید و حتی Down شدن سرویس شود.


راه‌حل

برای رفع مشکل، باید تعداد Apache Workers را حداقل برابر با مقدار pm_max_children در PHP-FPM تنظیم کنید.

در WHM به مسیر زیر بروید:

WHM » Home » Service Configuration » Global Configuration

و مقادیر زیر را تنظیم کنید:

  • Minimum Spare Servers
  • Maximum Spare Servers
  • Max Request Workers

این مقادیر باید بزرگ‌تر یا مساوی مقدار pm_max_children باشند.




Configuration Values of PHP-FPM


آخرین ویرایش: 5 دسامبر 2023


Overview

این بخش تمام تنظیمات PHP-FPM و مقادیر پیش‌فرض آن‌ها را توضیح می‌دهد. برخی از این تنظیمات از طریق WHM و بخش MultiPHP Manager قابل مدیریت هستند.

هشدار: فعال‌سازی PHP-FPM فقط زمانی توصیه می‌شود که سرور حداقل 2GB RAM یا حداقل 30MB RAM برای هر دامنه داشته باشد. در غیر این صورت، سرور با مشکلات شدید عملکردی مواجه می‌شود.


Global Directives

این تنظیمات در فایل /var/cpanel/ApachePHPFPM/system.yaml قرار دارند. هنگام ویرایش این فایل باید نقطه‌ها را با آندرلاین جایگزین کنید.

KeyNameDefault
daemonizedaemonizeno
emergency_restart_intervalemergency_restart_interval0
error_logerror_log/opt/cpanel/.../php-fpm/error.log
log_levellog_levelnotice
pidpid/opt/cpanel/.../php-fpm.pid
process_control_timeoutprocess_control_timeout10

هشدار: هرگونه اشتباه در فایل YAML باعث اختلال در سرویس‌ها می‌شود. قبل از ویرایش، حتماً بکاپ بگیرید.


Pool Name Directives

هر دامنه در PHP-FPM یک Pool جداگانه دارد. این تنظیمات در فایل system_pool_defaults.yaml قرار دارند.

KeyNameDefault
catch_workers_outputcatch_workers_outputyes
chdirchdir[% homedir %]
groupgroupnobody
listenlisten"[% socket_path %]"
listen_modelisten.mode0660
pmpmondemand
pm_max_childrenpm.max_children5
pm_max_requestspm.max_requests20
pm_process_idle_timeoutpm.process_idle_timeout10
useruser"[% username %]"

نکات مهم YAML

  • برای رشته‌هایی که شامل " هستند، باید از ' استفاده کنید.
  • برای استفاده از " داخل رشته، باید از \ استفاده کنید.
  • کلیدها فقط باید شامل حروف، اعداد و آندرلاین باشند.

افزودن یک مقدار جدید

نمونهٔ یک خط کامل تنظیم:


php_value_open_basedir: { name: 'php_value[open_basedir]', value: "[% documentroot %]" }

افزودن یک مقدار ناشناخته

برای افزودن مقادیری که به‌صورت پیش‌فرض وجود ندارند:


php_admin_value_ldap_max_links: { name: 'php_admin_value[ldap.max_links]', value: -1 }

هشدار: اگر از php_value یا php_flag استفاده کنید، مقدار جدید جایگزین php.ini در .htaccess می‌شود.


Conclusion

هماهنگ‌سازی صحیح Apache و PHP-FPM برای جلوگیری از گلوگاه‌های عملکردی ضروری است. همچنین شناخت کامل تنظیمات PHP-FPM به شما کمک می‌کند تا بهترین عملکرد را برای سایت‌ها و اپلیکیشن‌های PHP فراهم کنید.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

راهنمای کامل بازیابی اکانت cPanel و انتقال حساب‌ها و تنظیمات برای مدیران سیستم تازه‌کار

این مقاله یک راهنمای جامع برای مدیران سیستم تازه‌کار است که می‌خواهند اکانت‌های cPanel را بازیابی کنند، حساب‌ها و تنظیمات را بین سرورها منتقل کنند، و از ابزارهای تشخیصی برای بررسی مشکلات انتقال و بازیابی استفاده کنند. این راهنما شامل نحوه استفاده از WHM، نحوه آپلود بکاپ‌ها، روش‌های انتقال، و فعال‌سازی لاگ‌های پیشرفته است.

ادامه

How to Move All cPanel Accounts from One Server to Another

This guide explains how to migrate all cPanel accounts, service configurations, SSL certificates, and the main server IP address from an old source server to a new target server. It covers installation requirements, configuration transfers, account migration, IP reassignment, DNS adjustments, and SSL restoration.

ادامه

آموزش کامل مهاجرت یک وب‌سایت وردپرس از macOS به سرور cPanel & WHM

این مقاله نحوه انتقال یک وب‌سایت وردپرس که روی macOS میزبانی شده است را به یک سرور cPanel & WHM توضیح می‌دهد. شامل خروجی گرفتن از دیتابیس، آپلود فایل‌ها، ایجاد دیتابیس جدید، تنظیم wp-config.php، تغییر URL سایت، و رفع لینک‌ها و تصاویر خراب است.

ادامه

آموزش کامل انتقال دستی یک اکانت بین سرورها در cPanel & WHM

این مقاله نحوه انتقال دستی یک اکانت بین دو سرور را زمانی که حجم اکانت برای ابزارهای انتقال WHM بسیار بزرگ است توضیح می‌دهد. شامل ایجاد دایرکتوری موقت، فشرده‌سازی public_html و لاگ‌ها، انتقال امن با scp، و بازیابی فایل‌ها در سرور جدید است.

ادامه

آموزش کامل مهاجرت دستی داده‌های Horde به Roundcube در cPanel & WHM

این مقاله نحوه مهاجرت دستی تقویم‌ها و مخاطبین Horde به Roundcube را در نسخه‌های 108 تا 118 cPanel & WHM توضیح می‌دهد. شامل مراحل خروجی گرفتن از Horde، انتقال فایل‌ها به مسیرهای صحیح، و وارد کردن داده‌ها در Roundcube با استفاده از افزونه‌های داخلی یا ابزارهای واردسازی است.

ادامه

آموزش کامل مهاجرت دستی اکانت‌ها از کنترل‌پنل‌های غیرپشتیبانی‌شده به cPanel & WHM

این مقاله نحوه مهاجرت دستی اکانت‌ها از کنترل‌پنل‌های غیرپشتیبانی‌شده به cPanel & WHM را توضیح می‌دهد. شامل اقدامات قبل از مهاجرت، نصب سرور جدید، انتقال فایل‌ها و دایرکتوری‌ها، بازیابی دیتابیس‌ها، انتقال SSL، و اقدامات پس از مهاجرت است.

ادامه