فهرست مقاله
- 1 دلیل اصلی بارگذاری بیش از حد PHP-FPM
- 2 بهینه سازی استخر فرآیند PHP-FPM (تنظیم پارامتر اصلی)
- 3 نظارت بر وضعیت PHP-FPM را برای پیگیری پیشرفت در هر زمان فعال کنید
- 4 گزارش های PHP-FPM را برای عیب یابی سریع مشکلات بهینه کنید
- 5 برای جلوگیری از نشت حافظه، PHP-FPM را به طور منظم راه اندازی مجدد کنید
- 6 اگر مشکل ادامه پیدا کرد چه؟ بهینه سازی بیشتر
- 7 خلاصه: PHP-FPM را بهینه کنید و وب سایت دیگر خراب نمی شود!
آیا تا به حال با این وضعیت مواجه شده اید؟دسترسی به وب سایت به طور ناگهانی کاهش یافت، یا حتی منجر به خطای 500 شد، پس از راه اندازی مجدد PHP-FPM، به حالت عادی بازگشت.، اما مشکل بعد از مدتی دوباره ظاهر می شود؟ این خیلی خسته کننده است!
چرا این اتفاق می افتد؟در واقع، این معمولامخزن فرآیند PHP-FPM به درستی پیکربندی نشده است یا منابع سرور کافی نیست.ناشی از. امروز ما به طور کامل بهینه سازی خواهیم کرد HestiaCP PHP-FPM در زیر هود، وب سایت را مانند یک سنگ پایدار می کند!
دلیل اصلی بارگذاری بیش از حد PHP-FPM
PHP-FPM یک استمدیر فرآیند، که وظیفه رسیدگی به درخواست های پویا را بر عهده دارد. اگر پیکربندی معقول نباشد، ممکن است منجر به موارد زیر شود:
- منابع سرور تمام شده است، باعث می شود PHP-FPM قادر به پاسخگویی به موقع به درخواست های جدید نباشد.
- فرآیندهای خیلی کم، هنگامی که ترافیک به طور ناگهانی افزایش می یابد، نمی توان آن را به موقع پردازش کرد.
- استفاده از فرآیند بسیار زیاد است، باعث انفجار بار CPU می شود.

چگونه بفهمیم 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
برای کشف ترفندهای مخفی بیشتر🔑، به کانال تلگرام ما بپیوندید!
اگر دوست داشتید به اشتراک بگذارید و لایک کنید! اشتراک گذاری ها و لایک های شما انگیزه ادامه دار ماست!