HestiaCP PHP-FPM ແມ່ນຢູ່ພາຍໃຕ້ການໂຫຼດຫນັກບໍ? ໜ້າເວັບແບບໄດນາມິກ 500 ຜິດພາດບໍ? ການເພີ່ມປະສິດທິພາບນີ້ຈະມີຜົນທັນທີ!

ລາຍການຫົວເລື່ອງ

ເຈົ້າເຄີຍພົບສະຖານະການແບບນີ້ບໍ?ການເຂົ້າເຖິງເວັບໄຊທ໌ຊ້າລົງຢ່າງກະທັນຫັນ, ຫຼືແມ້ກະທັ້ງສົ່ງຜົນໃຫ້ເກີດຄວາມຜິດພາດ 500 ຫຼັງຈາກ restart PHP-FPM, ມັນກັບຄືນສູ່ປົກກະຕິ., ແຕ່ບັນຫາຈະປາກົດຄືນໃຫມ່ຫຼັງຈາກເວລາໃດຫນຶ່ງ? ອັນນີ້ມັນເສົ້າໃຈ!

ເປັນຫຍັງເຫດການນີ້ເກີດຂື້ນ?ໃນຄວາມເປັນຈິງ, ນີ້ແມ່ນປົກກະຕິແລ້ວກຸ່ມຂະບວນການ PHP-FPM ບໍ່ໄດ້ຖືກຕັ້ງຄ່າຢ່າງຖືກຕ້ອງ, ຫຼືຊັບພະຍາກອນຂອງເຄື່ອງແມ່ຂ່າຍບໍ່ພຽງພໍ.ເກີດຈາກ. ໃນມື້ນີ້, ພວກເຮົາຈະເພີ່ມປະສິດທິພາບຢ່າງລະອຽດ HestiaCP PHP-FPM ພາຍໃຕ້ hood ເຮັດໃຫ້ເວັບໄຊທ໌ມີຄວາມຫມັ້ນຄົງຄືກັບຫີນ!

ເຫດຜົນຫຼັກວ່າເປັນຫຍັງ PHP-FPM ແມ່ນ overloaded

PHP-FPM ເປັນຜູ້ຈັດການຂະບວນການ, ເຊິ່ງຮັບຜິດຊອບໃນການຈັດການການຮ້ອງຂໍແບບເຄື່ອນໄຫວ. ຖ້າການຕັ້ງຄ່າບໍ່ສົມເຫດສົມຜົນ, ມັນອາດຈະນໍາໄປສູ່:

  • ຊັບພະຍາກອນເຊີບເວີໝົດແລ້ວ, ເຮັດໃຫ້ PHP-FPM ບໍ່ສາມາດຕອບສະຫນອງຄໍາຮ້ອງຂໍໃຫມ່ໄດ້ທັນເວລາ;
  • ຂະບວນການຫນ້ອຍເກີນໄປ, ເມື່ອການຈະລາຈອນເພີ່ມຂຶ້ນຢ່າງກະທັນຫັນ, ມັນບໍ່ສາມາດດໍາເນີນການໄດ້ທັນເວລາ;
  • ການນໍາໃຊ້ຂະບວນການສູງເກີນໄປ, ເຮັດໃຫ້ການໂຫຼດ CPU ລະເບີດ.

HestiaCP PHP-FPM ແມ່ນຢູ່ພາຍໃຕ້ການໂຫຼດຫນັກບໍ? ໜ້າເວັບແບບໄດນາມິກ 500 ຜິດພາດບໍ? ການເພີ່ມປະສິດທິພາບນີ້ຈະມີຜົນທັນທີ!

ວິທີການບອກວ່າ PHP-FPM ແມ່ນ overloaded?

ສາມາດນໍາໃຊ້ 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ເນື່ອງຈາກວ່າມັນສາມາດຮັກສາຈໍານວນທີ່ແນ່ນອນຂອງຂະບວນການ idle ແລະຫຼີກເວັ້ນການ 500 ຄວາມຜິດພາດໃນລະຫວ່າງການ concurrency ສູງ.

ມັນແນະນໍາໃຫ້ໃຊ້ມັນພຽງແຕ່ໃນເວລາທີ່ປະລິມານການເຂົ້າເຖິງຕ່ໍາສຸດແລະຊັບພະຍາກອນຫນ່ວຍຄວາມຈໍາແຫນ້ນ. 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: ຈັດສັນຂະບວນການທີ່ມີຄວາມຍືດຫຍຸ່ນຫຼາຍຂື້ນເພື່ອຫຼີກເວັ້ນການຮ້ອງຂໍລໍຖ້າທີ່ອາດຈະເກີດຈາກ ondemand;
  • pm.max_children = 16: ປ້ອງກັນ 500 ຄວາມຜິດພາດທີ່ເກີດຈາກຂະບວນການຫນ້ອຍເກີນໄປ;
  • pm.start_servers = 5: ຫຼີກເວັ້ນການເລີ່ມຕົ້ນຂະບວນການຊ້າ;
  • pm.max_requests = 3000ທ່ານ ອາຊື ກອນສິນ ນັກທຸລະກິດລາວປ້ອງກັນການຮົ່ວໄຫຼຂອງຄວາມຊົງຈໍາ, recycle ຂະບວນການເປັນປົກກະຕິ.

2. ຈໍາກັດເວລາປະຕິບັດຂອງ script PHP ເພື່ອປ້ອງກັນການຄອບຄອງໃນໄລຍະຍາວ

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

ນີ້ສາມາດປ້ອງກັນບໍ່ໃຫ້ບາງscript PHP ທີ່ໃຊ້ CPU ຫຼາຍເກີນໄປສາມາດເຮັດໃຫ້ເຄື່ອງແມ່ຂ່າຍຂອງທ່ານຫຼຸດລົງ.

ຫຼັງຈາກບັນທຶກ, ເລີ່ມຕົ້ນຂະບວນການ PHP ຄືນໃໝ່:

sudo systemctl restart php8.3-fpm

ເປີດໃຊ້ການກວດສອບສະຖານະ PHP-FPM ເພື່ອຕິດຕາມຄວາມຄືບໜ້າໄດ້ທຸກເວລາ

ເປີດໃຊ້ການກວດສອບຂະບວນການ PHP-FPM ແລະເບິ່ງມັນໄດ້ທຸກເວລາຈໍານວນປະຈຸບັນຂອງຂະບວນການທີ່ຫ້າວຫັນແລະສະຖານະການລໍຖ້າການຮ້ອງຂໍ, ເພື່ອຫຼີກເວັ້ນການ overload ຂອງເຄື່ອງແມ່ຂ່າຍ.

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 ຍັງບໍ່ໄດ້ເປີດໃຊ້, ທ່ານສາມາດຕິດຕັ້ງມັນແບບນີ້ໄດ້ (ໃຊ້ Ubuntu ເປັນຕົວຢ່າງ):

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 ແລະເວັບໄຊທ໌ຈະບໍ່ crash ອີກຕໍ່ໄປ!

ພວກເຮົາມີການປັບຕົວຫຍັງແດ່ຫຼັງຈາກການເພີ່ມປະສິດທິພາບນີ້?

✅ ການເພີ່ມປະສິດທິພາບຂອງຂະບວນການ PHP-FPM, ໃຊ້ ondemandແລະເພີ່ມປະສິດທິພາບ pm.max_children ພາລາມິເຕີ;
ການຈໍາກັດເວລາປະຕິບັດຂອງ script PHP, ເພື່ອປ້ອງກັນການຍຶດຄອງ CPU ໃນໄລຍະຍາວ;
ເປີດໃຊ້ການກວດສອບ PHP-FPM, ເບິ່ງການໂຫຼດຂະບວນການໃນເວລາທີ່ແທ້ຈິງ;
ການເພີ່ມປະສິດທິພາບບັນທຶກ PHP-FPM, ຢ່າງວ່ອງໄວແກ້ໄຂບັນຫາ 500 ຄວາມຜິດພາດ;
ຣີສະຕາດ PHP-FPM ເປັນປະຈຳ, ປ້ອງກັນການຮົ່ວໄຫລຂອງຫນ່ວຍຄວາມຈໍາ;
ເປີດໃຊ້ OPcache, ປັບປຸງປະສິດທິພາບການປະຕິບັດ PHP;
ການປັບແຕ່ງການຕັ້ງຄ່າ Nginx, ເພື່ອຫຼີກເວັ້ນບັນຫາການຫມົດເວລາ.

ຫຼັງຈາກການເພີ່ມປະສິດທິພາບນີ້, ການໂຫຼດ PHP-FPM ຈະຫຼຸດລົງຢ່າງຫຼວງຫຼາຍແລະການດໍາເນີນງານເວັບໄຊທ໌ຈະມີຄວາມຫມັ້ນຄົງຫຼາຍ! 🔥

ໄປລອງມັນດຽວນີ້! 💪🚀

ຫວັງ Chen Weiliang Blog ( https://www.chenweiliang.com/ ) shared "HestiaCP PHP-FPM load ແມ່ນສູງເກີນໄປບໍ? ໜ້າເວັບແບບໄດນາມິກ 500 ຜິດພາດບໍ? ການເພີ່ມປະສິດທິພາບນີ້ຈະມີຜົນທັນທີ! ”, ມັນອາດຈະເປັນປະໂຫຍດສໍາລັບທ່ານ.

ຍິນດີຕ້ອນຮັບແບ່ງປັນການເຊື່ອມຕໍ່ຂອງບົດຄວາມນີ້:https://www.chenweiliang.com/cwl-32512.html

ເພື່ອປົດລັອກເຄັດລັບທີ່ເຊື່ອງໄວ້ເພີ່ມເຕີມ🔑, ຍິນດີຕ້ອນຮັບເຂົ້າສູ່ຊ່ອງ Telegram ຂອງພວກເຮົາ!

Share and like ຖ້າທ່ານມັກມັນ! ການແບ່ງປັນ ແລະຖືກໃຈຂອງເຈົ້າເປັນແຮງຈູງໃຈຢ່າງຕໍ່ເນື່ອງຂອງພວກເຮົາ!

 

评论评论

ທີ່ຢູ່ອີເມວຂອງເຈົ້າຈະບໍ່ຖືກເຜີຍແຜ່. ທົ່ງນາທີ່ກໍານົດໄວ້ແມ່ນຖືກນໍາໃຊ້ * ປ້າຍ ກຳ ກັບ

ເລື່ອນໄປທາງເທີງ