HestiaCP PHP-FPM تحت بار سنگین است؟ خطای صفحه وب داینامیک 500؟ این بهینه سازی بلافاصله اعمال می شود!

آیا تا به حال با این وضعیت مواجه شده اید؟دسترسی به وب سایت به طور ناگهانی کاهش یافت، یا حتی منجر به خطای 500 شد، پس از راه اندازی مجدد PHP-FPM، به حالت عادی بازگشت.، اما مشکل بعد از مدتی دوباره ظاهر می شود؟ این خیلی خسته کننده است!

چرا این اتفاق می افتد؟در واقع، این معمولامخزن فرآیند PHP-FPM به درستی پیکربندی نشده است یا منابع سرور کافی نیست.ناشی از. امروز ما به طور کامل بهینه سازی خواهیم کرد HestiaCP PHP-FPM در زیر هود، وب سایت را مانند یک سنگ پایدار می کند!

دلیل اصلی بارگذاری بیش از حد PHP-FPM

PHP-FPM یک استمدیر فرآیند، که وظیفه رسیدگی به درخواست های پویا را بر عهده دارد. اگر پیکربندی معقول نباشد، ممکن است منجر به موارد زیر شود:

  • منابع سرور تمام شده است، باعث می شود PHP-FPM قادر به پاسخگویی به موقع به درخواست های جدید نباشد.
  • فرآیندهای خیلی کم، هنگامی که ترافیک به طور ناگهانی افزایش می یابد، نمی توان آن را به موقع پردازش کرد.
  • استفاده از فرآیند بسیار زیاد است، باعث انفجار بار CPU می شود.

HestiaCP PHP-FPM تحت بار سنگین است؟ خطای صفحه وب داینامیک 500؟ این بهینه سازی بلافاصله اعمال می شود!

چگونه بفهمیم PHP-FPM بیش از حد بارگذاری شده است؟

می توانید استفاده کنید top یا htop دستور مشاهده میزان مصرف CPU و حافظه:

top -c

اگر اطلاعات فرآیند مشابه زیر را مشاهده کردید، به این معنی است که PHP-FPM تحت بار بالا در حال اجرا است:

1669293 abc     20   0  790284 227880 185568 R  73.1   0.9   1:30.09 php-fpm: pool chenweiliang.com                                                    
1669522 abc     20   0  801924 224224 170236 R  69.9   0.9   0:59.01 php-fpm: pool chenweiliang.com

ببینید چگونه این فرآیندها بیش از 70 درصد از CPU را اشغال می کنند؟ اگر اغلب این اتفاق می افتد، PHP-FPM شما حتما مشکلی هست!

بنابراین، چگونه می‌توانیم پیکربندی PHP-FPM را بهینه کنیم تا سرور دیگر بارگذاری نشود؟

بهینه سازی استخر فرآیند PHP-FPM (تنظیم پارامتر اصلی)

اول، باز php-fpm فایل های پیکربندی:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *نسخه PHP خود را مانند PHP8.3 تغییر دهید و آن را به این صورت تغییر دهید:/etc/php/8.3/fpm/pool.d/www.conf

نسخه PHP تنظیم شده توسط HestiaCP را پرس و جو کنید

v-list-web-domain user domain.com

به عنوان مثال:

v-list-web-domain abc chenweiliang.com

در خروجی چیزی شبیه به:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

این بدان معنی است که وب سایت استفاده می کند PHP 8.3.

بیایید نگاهی به پیکربندی PHP-FPM شما بیندازیم:

[chenweiliang.com]
listen = /run/php/php8.3-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660

user = abc
group = abc

pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s

شما می توانید ببینید که شما pm مورد استفاده است ondemand،اگرچه می تواند مصرف منابع را در زمان بیکاری کاهش دهد، اما وقتی ترافیک ناگهان افزایش می یابد، ممکن است فرآیند نتواند به موقع پاسخ دهد.، منجر به خطای 500 می شود.

1. پارامترهای استخر فرآیند PHP-FPM را تنظیم کنید

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

برای وب‌سایت‌هایی با میزان مشخصی از ترافیک، استفاده از آن توصیه می‌شود pm = dynamicزیرا می‌تواند مقدار مشخصی از فرآیندهای بیکار را حفظ کند و از ۵۰۰ خطا در حین همزمانی بالا جلوگیری کند.

توصیه می‌شود فقط زمانی از آن استفاده کنید که حجم دسترسی بسیار کم و منابع حافظه محدود باشد. pm = ondemand برای صرفه‌جویی در منابع.

پیشنهاد شده است ondemand، و بهینه سازی کنید pm.max_children و پارامترهای دیگر:

pm = dynamic
pm.max_children = 16  ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4   ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2  ; 最小空闲进程数
pm.max_spare_servers = 7  ; 最大空闲进程数
pm.max_requests = 3000    ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s  ; 空闲进程 10s 后自动退出

چرا میخوای اینجوری عوضش کنی؟

  • pm = dynamic: فرآیندها را با انعطاف بیشتری تخصیص دهید تا از انتظار درخواستی که ممکن است ناشی از تقاضای درخواستی باشد جلوگیری شود.
  • pm.max_children = 16: جلوگیری از 500 خطا ناشی از فرآیندهای بسیار کم.
  • pm.start_servers = 5: از راه اندازی کند فرآیند اجتناب کنید.
  • pm.max_requests = 3000:جلوگیری از نشت حافظه، فرآیند را به طور منظم بازیافت کنید.

2. محدود کردن زمان اجرای اسکریپت های PHP برای جلوگیری از اشغال طولانی مدت

request_terminate_timeout = 30s  ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M  ; 限制 PHP 进程最大内存占用

این می تواند از برخی جلوگیری کنداسکریپت های PHP که از CPU بیش از حد استفاده می کنند می توانند سرور شما را خراب کنند.

پس از ذخیره، فرآیند PHP را مجدداً راه اندازی کنید:

sudo systemctl restart php8.3-fpm

نظارت بر وضعیت PHP-FPM را برای پیگیری پیشرفت در هر زمان فعال کنید

نظارت بر فرآیند PHP-FPM را فعال کنید و آن را در هر زمان مشاهده کنیدتعداد فعلی فرآیندهای فعال و وضعیت انتظار درخواست، برای جلوگیری از بارگذاری بیش از حد سرور.

php-fpm.conf اضافه شده در:

pm.status_path = /status

سپس، پیکربندی Nginx:

location /status {
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    allow 127.0.0.1;
    deny all;
}

از این طریق می توانید http://yourdomain.com/status PHP-FPM را در عمل بررسی کنید!

گزارش های PHP-FPM را برای عیب یابی سریع مشکلات بهینه کنید

php-fpm.conf 添加:

php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s  ; 执行超过 5s 的脚本记录到日志

به این ترتیب، هر زمان که خطای 500 رخ داد، می توانید مستقیماً گزارش را مشاهده کنید:

tail -f /var/log/php-fpm/error.log

ببینید آیا PHP خطایی را گزارش می کند، مانند out of memory،script execution timeout

برای جلوگیری از نشت حافظه، PHP-FPM را به طور منظم راه اندازی مجدد کنید

قادر به عبور است cron PHP-FPM را به طور منظم راه اندازی مجدد کنید تا از ایجاد فرآیندهای طولانی مدت جلوگیری کنیدنشت حافظه.

crontab -e

برای راه اندازی مجدد خودکار PHP-FPM هر روز در ساعت 3 صبح، کار برنامه ریزی شده زیر را اضافه کنید:

0 3 * * * /usr/sbin/service php8.3-fpm restart

اگر مشکل ادامه پیدا کرد چه؟ بهینه سازی بیشتر

اگر همچنان از بهینه سازی بالا پیروی می کنیدگاهی اوقات 500 خطا رخ می دهد، می توانید با بهینه سازی های زیر ادامه دهید:

1. OPcache را برای بهبود کارایی اجرای PHP فعال کنید

اگر OPcache هنوز فعال نشده است، می توانید آن را به این صورت نصب کنید (به عنوان مثال از اوبونتو استفاده کنید):

sudo apt install php8.3-opcache -y

سپس ویرایش کنید php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1

اثر؟ سرعت اجرای صفحه PHP بسیار بهبود یافته است!

2. بهینه سازی پیکربندی Nginx

اطمینان حاصل کنید که پارامترهای مربوط به Nginx معقول هستند، مانند fastcgi_read_timeout برای جلوگیری از پایان یافتن اسکریپت های PHP توسط Nginx به دلیل زمان طولانی، آن را به درستی تنظیم کنید:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

خلاصه: PHP-FPM را بهینه کنید و وب سایت دیگر خراب نمی شود!

بعد از این بهینه سازی چه تنظیماتی انجام داده ایم؟

✅ بهینه سازی مخزن فرآیند PHP-FPM،استفاده کنید ondemandو بهینه سازی کنید pm.max_children پارامتر؛
محدود کردن زمان اجرای اسکریپت های PHPبرای جلوگیری از اشغال طولانی مدت CPU؛
مانیتورینگ PHP-FPM را فعال کنید، بار فرآیند را در زمان واقعی مشاهده کنید.
بهینه سازی گزارش های PHP-FPM, عیب یابی سریع 500 خطا;
PHP-FPM را به طور منظم راه اندازی مجدد کنیدجلوگیری از نشت حافظه
OPcache را فعال کنیدبهبود کارایی اجرای PHP.
بهینه سازی پیکربندی Nginx، برای جلوگیری از مسائل مربوط به زمان.

پس از این بهینه سازی، بار PHP-FPM بسیار کاهش می یابد و عملکرد وب سایت پایدارتر می شود! 🔥

برو امتحان کن! 💪🚀

وبلاگ امید چن ویلیانگ ( https://www.chenweiliang.com/ ) اشتراک‌گذاری کرد: «بار HestiaCP PHP-FPM خیلی زیاد است؟ خطای صفحه وب داینامیک 500؟ این بهینه سازی بلافاصله اعمال می شود! "، ممکن است برای شما مفید باشد.

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

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

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

 

发表 评论

آدرس ایمیل شما منتشر نخواهد شد. از زمینه های مورد نیاز استفاده می شود * 标注

رفته به بالا