VPS هشت هسته‌ای ۲۴ گیگابایتی با کمبود حافظه مواجه است؟ راهنمای عملی برای تنظیم بهینه‌ی فرآیند PHP-FPM با HestiaCP

تعداد کاربران همزمانی که یک سرور می‌تواند مدیریت کند، به تعداد هسته‌های آن بستگی ندارد، بلکه به میزان حافظه‌ای که هر فرآیند مصرف می‌کند بستگی دارد.

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

چرا حافظه گلوگاه اصلی است؟

بسیاری از افراد با دیدن یک VPS با پردازنده ۸ هسته ای و ۲۴ گیگابایت حافظه، ناخودآگاه فکر می کنند که می توانند به راحتی صدها فرآیند PHP-FPM را اجرا کنند.

با این حال، در واقعیت، میزان استفاده از حافظه RSS توسط یک فرآیند PHP اغلب به ۲۰۰ مگابایت می‌رسد.

این نتیجه‌ای است که از طریق آزمایش واقعی از طریق خط فرمان به دست آمده است:

ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'

در چارچوب پیچیده و محیط چند افزونه‌ای HestiaCP، به خصوص بدون بهینه‌سازی OPcache، 200 مگابایت مقدار معمول است.

این یعنی حافظه، نه پردازنده، حد نهایی است که حداکثر همزمانی را تعیین می‌کند.

VPS هشت هسته‌ای ۲۴ گیگابایتی با کمبود حافظه مواجه است؟ راهنمای عملی برای تنظیم بهینه‌ی فرآیند PHP-FPM با HestiaCP

فایل پیکربندی پیشنهادی (php-fpm.conf)

pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s

منطق محاسبه پارامتر و مبنای تنظیم

پارامترهای پیکربندیتنظیم مقدارمحاسبه و مبنای تنظیم هسته
pmdynamicحالت پویا امکان اضافه یا حذف انعطاف‌پذیر فرآیندها را بر اساس الزامات همزمانی، با ایجاد تعادل بین سرعت پاسخ و استفاده از حافظه، فراهم می‌کند.
pm.max_children80۲۴ گیگابایت حافظه کل منهای هسته سیستم و خروجی/Redisبعد از Nginx، تقریباً ۱۶ گیگابایت برای PHP باقی می‌ماند.16,384 MB / 200 MB ≈ 81.9تنظیم آن روی ۸۰ می‌تواند OOM (Out of Memory) را در حین همزمانی بالا به طور کامل از بین ببرد.
pm.start_servers16پیش گرمایش در هنگام راه اندازی روی دو برابر تعداد هسته های CPU (8 هسته × 2 = 16) تنظیم شده است تا اطمینان حاصل شود که سرویس می تواند بلافاصله پس از راه اندازی مجدد، همزمانی اولیه را مدیریت کند.
pm.min_spare_servers8تعداد هسته‌های CPU را روی ۸ هسته تنظیم کنید تا اطمینان حاصل شود که در دوره‌های کم ترافیک، می‌توان به درخواست‌های جدید در هر زمانی پاسخ داد.
pm.max_spare_servers24آن را روی ۳ برابر تعداد هسته‌های CPU (۸ هسته × ۳ = ۲۴) تنظیم کنید تا تعداد متوسطی از فرآیندها پس از کاهش ترافیک حفظ شوند و نوسانات ملایم را مدیریت کنند.
pm.max_requests500اگر یک فرآیند واحد به حجم پایه بزرگ ۲۰۰ مگابایت برسد، کاهش تعداد درخواست‌ها به ۵۰۰، فرآیند را از بین می‌برد و دوباره می‌سازد، که می‌تواند نشت حافظه ضمنی را سریع‌تر پاک کند.
pm.process_idle_timeout10s超出 min_spare_servers فرآیندهای بیکار پس از 10 ثانیه عدم درخواست، به طور خودکار آزاد شده و به حافظه سیستم بازگردانده می‌شوند.

تنظیمات پشتیبانی ضروری و پیشنهادات بهینه‌سازی

۱. مکانیسم ضد خماری تایم اوت

request_terminate_timeout = 60s کلید ماجرا همین است.

می‌تواند فرآیندهایی را که به دلیل بن‌بست پایگاه داده یا مسدود شدن API شخص ثالث گیر کرده‌اند، به زور خاتمه دهد.

در همین حال، Nginx fastcgi_read_timeout باید حداقل 60 ثانیه نگه داشته شود، در غیر این صورت مشتری آن را زودتر از موعد دریافت خواهد کرد. 504 Gateway Timeout.

۲. راهکارهایی برای غلبه بر تنگناهای حافظه

حداکثر ۸۰ فرآیند همزمان به این معنی است که در شرایط همزمانی شدید، سیستم می‌تواند حداکثر ۸۰ درخواست HTTP پویا را به طور همزمان مدیریت کند.

اگر می‌خواهید ظرفیت را بیشتر بهبود دهید، تمرکز باید روی کاهش میزان استفاده از حافظه به ازای هر فرآیند باشد.

  • OPcache را فعال کنید: در حال حاضر php.ini پیکربندی متوسط opcache.enable=1opcache.memory_consumption=256ذخیره سازی بایت کد می‌تواند میزان استفاده از حافظه توسط یک فرآیند واحد را از ۲۰۰ مگابایت به ۶۰ تا ۱۰۰ مگابایت کاهش دهد.
  • کنترل معقول محدودیت حافظهphp.ini وسط memory_limit محدود به 128M یا 256Mبرای جلوگیری از اسکریپت‌های غیرعادی فردینامحدودحافظه زیادی مصرف می‌کند.

زمانی که میزان استفاده از حافظه توسط یک فرآیند به ۱۰۰ مگابایت کاهش یابد...pm.max_children می‌توان آن را با خیال راحت ارتقا داد 150 علاوه بر این، قابلیت همزمانی تقریباً دو برابر شده است.

دیدگاه‌های معتبر ذکر شده

طبق توصیه‌های موجود در مستندات رسمی Nginx :

«برنامه‌های FastCGI باید همیشه با دستورالعمل‌های timeout تحت نظارت باشند تا از اتمام منابع جلوگیری شود.»
(منبع: اسناد Nginx)

راهنمای رسمی PHP به وضوح بیان می‌کند:

"pm.max_children حداکثر تعداد فرآیندهای فرزندی که باید ایجاد شوند را تعریف می‌کند. این مهمترین دستورالعمل است."
(منبع: مستندات PHP-FPM)

این دیدگاه‌های معتبر کاملاً با شیوه‌های ما همسو هستند و ثابت می‌کنند که منطق بهینه‌سازی نه تنها مبتنی بر تجربه، بلکه مبتنی بر بهترین شیوه‌های استاندارد نیز می‌باشد.

نتیجه‌گیری: دیدگاه‌ها و نقل قول‌های کلیدی من

در سناریوهای با همزمانی بالا، CPU نقش موتور، حافظه نقش مخزن سوخت و PHP-FPM نقش توزیع‌کننده ناوگان را ایفا می‌کند.

مهم نیست موتور چقدر قدرتمند باشد، اگر مخزن سوخت به اندازه کافی بزرگ نباشد، کاروان مسافت زیادی را طی نخواهد کرد.

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

اساس بهینه‌سازی، یافتن تعادل بهینه با منابع محدود است.

این فقط یک فناوری نیست، بلکه یک فلسفه نیز هست.

بنابراین، از این باور که «تعداد هسته‌ها همه چیز را تعیین می‌کند» دست بردارید. آنچه واقعاً محدودیت همزمانی را تعیین می‌کند، کنترل شما بر حافظه است.

اقدام کنید و VPS خود را با تمام توان بهینه کنید و از هر قطره حافظه نهایت استفاده را ببرید.

امیدوارم مقاله «حافظه VPS هشت هسته‌ای ۲۴ گیگابایتی رو به اتمام است؟ تنظیم شدید استخر پردازش PHP-FPM تحت HestiaCP» که در وبلاگ چن ویلیانگ ( https://www.chenweiliang.com/ ) به اشتراک گذاشته شده است، برای شما مفید باشد.

لینک این مقاله را به اشتراک بگذارید: https://www.chenweiliang.com/cwl-34509.html

برای کشف ترفندهای مخفی بیشتر🔑، به کانال تلگرام ما بپیوندید!

اگر دوست داشتید به اشتراک بگذارید و لایک کنید! اشتراک گذاری ها و لایک های شما انگیزه ادامه دار ماست!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

رفته به بالا