
FastCGI Process Manager (FPM) چیست ؟
CGI چیست ؟
Common Gateway Interface
CGI (واسط دروازه مشترک) یک فناوری و پروتکل وب است که راهی را برای وب سرور (سرور HTTP) برای تعامل با برنامه های کاربردی خارجی تعریف می کند، به عنوان مثال. PHP. CGI قابلیتهای وب سرور را برای فعال کردن تولید و پردازش محتوای پویا افزایش میدهد.
در صفحه رسمی FPM در سایت PHP.NET (اینجا) به این نکته اشاره شده که FPM برای مدیریت بار زیاد سرور استفاده می شود !
کاهش بار CPU پس از تنظیم PHP-FPM
بهینه سازی PHP-FPM برای بهترین عملکرد، فقط یک اصلاح الگو نیست. پیکربندی و پارامترهای سرویس بر اساس نیازها و منابع سرور متفاوت است.
در زمان اوج ترافیک، عملکرد با ساعات عادی متفاوت خواهد بود. بنابراین، پس از انجام تنظیمات، تست های استرس را انجام می دهیم تا ببینیم سرویس در هنگام بارگذاری بالا چگونه عمل می کند.
بر اساس عملکرد سرور در هنگام تست استرس، ما تنظیمات دقیق تری سرویس را انجام می دهیم. ما همچنین بارگذاری سرور را برای مدتی نظارت می کنیم تا مطمئن شویم که تغییرات واقعاً کمک کرده است.

خب حالا که متوجه شدیم که راه حلی برای افزایش کارایی سرور خودمون و یا نجات سرورمون از میزان ترافیک بالا باید از PHP FPM استفاده کنیم بهتره کمی بیشتر سینتکس آن آشنا شویم .
بهترین روش موجود برای مدیریت بار زیاد سرور !
بعد از پیکربندی صحیح FPM و ایجاد ساختار برای یک POOL و اعمال بر همه از POOL های غیر استاندارد که منابع زیادی از سرور را درگیر می کند جلوگیری می کند .
- مدیریت میزان CPU مصرفی
- مدیریت هسته های CPU
- مدیریت میزان مصرف بلتفرم از رم
- قابلیت

FastCGI Process Manager (FPM)
هشدار های قبل استفاده مقاله
متغیر های زیادی برای کنترل منابع سرور در PHP FPM وجود دارد که تنظیم نادرست آن نه تنها باعث کاهش بار سرور نمی شود بلکه باعث می شود با سوییچ بیش از حد یا تخصیص دادن منابع بیشتر به هر کلاینت سرور را overload کند.
پس لطفا تا منابع را کامل بررسی نکرده مقادیر استفاده شده را به طور ناگهانی و میزان زیاد افزایش یا کاهش ندهید !
در صورتی که PHP FPM را فعال کردید و سرور overload شد! مقاله
برای رفع اشکال، اولین کاری که باید انجام بدیم بررسی گزارش های خطای PHP-FPM است که در مکانی مانند
/var/log/php7.0-fpm.log
موجود است.
مکان گزارش های خطا (log) بر اساس مسیر نصب و نسخه PHP متفاوت است.
بعد پیدا کردن فایل گزارش ها هنگام بررسی گزارش خطا، هشدارهایی مانند اینها را میبینید :
[12-Nov-2018 11:12:11] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 9 idle, and 89 total children
این پیام به این معنی است که Pool (استخر) PHP-FPM بسیار شلوغ است و قادر به مدیریت ترافیک بالا با پارامترهای تعریف شده فعلی نیست.
نکته : Pool : در علم کامپیوتر، یک استخر (Pool) مجموعه ای از منابع است که آماده استفاده نگه داشته می شوند، نه اینکه پس از استفاده به دست آمده و پس از آن منتشر شوند. در این زمینه، منابع می توانند به منابع سیستمی مانند دسته فایل ها که خارج از یک فرآیند هستند یا منابع داخلی مانند اشیا اشاره کنند.
In computer science, a pool is a collection of resources that are kept ready to use, rather than acquired on use and released afterwards. In this context, resources can refer to system resources such as file handles, which are external to a process, or internal resources such as objects.
مورادی که باعث می شود FPM باعث بار زیاد سرور شود مقاله
PHP-FPM به دلایل زیادی می تواند منجر به بار بالای سرور شود:
- تعداد زیادی Pool به دلیل ترافیک بالا یا حملات زیاد در حال اجرا هستند
- یک سرویس مرتبط مانند MySQL یا وب سرور مورد حمله قرار گرفته شده
- پیکربندی PHP-FPM به درستی طبق منابع سرور تنظیم نشده است
- برنامه های دارای سینتکس ضعیف یا باگ که منابع سرور را بیش از حد درگیر کرده است
نحوه انجام و تنظیم PHP-FPM برای پردازش های سنگین سرور (در حین اختلال) مقاله
اولین کاری که صاحبان سرور تمایل دارند برای بالا آمدن فوری سرور انجام دهند، راه اندازی مجدد سرویس PHP-FPM است. اما راهاندازی مجدد سرویس تنها یک راهحل چاره ی سطحی و موقتی است، و به زودی و دوباره شاهد افزایش ناگهانی بار خواهید بود.
برای رفع مشکل ابتدا باید تمام لاگ ها را بررسی و در دوره زمانی ها مشخص سرور را |آنلایز کنیم .
در صورت اختلال موارد زیر را حتما بازبینی کنید .
تغییر Process manager در FPM (هسته پردازنده) مقاله
مدیر فرآیند ، Process manager در FPM عمدتاً از 3 نوع است - dynamic, ondemand , static (پویا، درخواستی و استاتیک) و عملکرد برنامه و سرور شما بر اساس این سه متغیر به شدت متفاوت است.
در نوع dynamic ، تعداد پردازش های child processes به صورت پویا بر اساس پارامترهای PHP-FPM در فایل conf تنظیم می شود. اما یک متد است که نیاز به رم زیادی دارد .
در نوع static ، تمام child processes توسط متغیر pm.max_children ثابت هستند ، این نوع تابع برای سایت هایی با ترافیک متغیر به هیچ وجه مناسب نیست !
در نوع ondemand ، در این نوع تابع تمام توابع PHP-FPM، تنها بر اساس تقاضا و بر اساس ترافیک منابع را ایجاد می کند. ondemand به مدیریت ترافیک متناوب در پایداری رم کمک می کند . اما اگر نوسانات ترافیک بیش از حد زیاد باشد، میزان مصرف منابع افزایش می یابد.
PHP-FPM process (موارد بالا) بعد از ارزیابی حافظه سرور موجود، افزایش ترافیک، بازدید صفحات وب سایت،میزان استفاده از CPU شروع به عملیات می کند .
تغییر پارامترهای PHP-FPM در فایل php-fpm.conf مقاله
PHP-FPM دارای پارامترهای پیکربندی زیادی است که نحوه عملکرد آن را تعیین می کند. این پارامترها باید بر اساس منابع سرور مانند RAM و CPU تعیین شوند.
به عنوان مثال، کل فرآیندهایی که در یک سرور اجرا می شوند تقریباً به این حالت قرار می گیرند : تمام میزان رم تقسم بر رمی که هر فرآیند درگیر می کند
فایل پیکربندی PHP-FPM در /etc/php-fpm.conf یا مکان دیگری بر اساس مسیر نصب در دسترس خواهد بود. محتویات فایل به شکل زیر خواهد بود:
listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 5 pm.max_requests = 150
اساسی ترین پارامتری که عملکرد FPM را کنترل می کند موارد بالاست که حالا آن ها را باز می کنیم :
pm.max_children - برای تنظیم تعداد کل فرآیندهای مجاز برای اجرا
pm.start_servers - تعداد پردازش های زیر شاخه ایجاد شده در راه اندازی
pm.min_spare_servers – حداقل تعداد فرآیندهای بدون استفاده (idle) را تعریف می کند
pm.max_spare_servers - حداکثر تعداد فرآیندهای سرور بیکار را تنظیم می کند
pm.process_idle_timeout - تعداد ثانیههایی که یک فرآیند بدون استفاده در حال اجرا خواهد بود
pm.max_requests - تعداد درخواستهایی که هر فرایند زیرشاخه -> (فرایند اصلی)، قبل از درخواست مجدد بتواند اجرا کند.
فعال کردن log - برای سایت های روی سایت که با FPM تداخل دارند ! مقاله
در زمانی که پارامتر ها به طور مناسب تنظیم شده است ولی یک سایت یا برنامه خاص مشکوک به استفاده منابع زیاد است باید گزینه slow log را در PHP-FPM فعال کنیم.
request_slowlog_timeout = 6s slowlog = /var/log/php-fpm/slowlog-site.log
پارامتر "slowlog" در فایل پیکربندی PHP-FPM درخواست هایی را که بیش از 6 ثانیه طول می کشد تا اجرا شوند، را داخل فایل slowlog-site.log ثبت می کند.
تجزیه و تحلیل درخواستها ثبت شده داخل این فایل ما را قادر میسازد درخواستها و برنامههای پرمصرف منابع را در سرور ردیابی و رفع کنیم.
ضمانت بازگشت وجه ۷ روزه بدون ریسک
در صورت عدم تطابق دوره با سرفصلها، وجه پرداختی شما را بازگشت خواهیم داد.
دوره های مرتبط
نوشتن یک ماژول ساده خوش آمد گویی در کنسول سرور لینوکسی با زبان پایتون
در پکیج آموزش طراحی سایت دو و چند زبانه، تمام ابزارهای مورد نیاز برای چندزبانه کردن یک وبسایت وردپرسی، در اختیار شما قرار گرفته است.
نصب آنتی ویرویس imunify روی سرور WHM/CPANEL
در پکیج آموزش طراحی سایت دو و چند زبانه، تمام ابزارهای مورد نیاز برای چندزبانه کردن یک وبسایت وردپرسی، در اختیار شما قرار گرفته است.
HTTP چیست؟ چرا HTTP/2 سریعتر از HTTP/1.1 است؟
در پکیج آموزش طراحی سایت دو و چند زبانه، تمام ابزارهای مورد نیاز برای چندزبانه کردن یک وبسایت وردپرسی، در اختیار شما قرار گرفته است.
نصب HTTPS and SSL رایگان – بر روی سرور
در پکیج آموزش طراحی سایت دو و چند زبانه، تمام ابزارهای مورد نیاز برای چندزبانه کردن یک وبسایت وردپرسی، در اختیار شما قرار گرفته است.
نظرات
رایگان!

شمشاد امیری خراسانی
Senior Software Developerبرنامه نویس آزاد