ລາຍການຫົວເລື່ອງ
- 1 ເຫດຜົນຫຼັກວ່າເປັນຫຍັງ PHP-FPM ແມ່ນ overloaded
- 2 PHP-FPM ການເພີ່ມປະສິດທິພາບກຸ່ມຂະບວນການ (ການປັບຕົວພາລາມິເຕີຫຼັກ)
- 3 ເປີດໃຊ້ການກວດສອບສະຖານະ PHP-FPM ເພື່ອຕິດຕາມຄວາມຄືບໜ້າໄດ້ທຸກເວລາ
- 4 ເພີ່ມປະສິດທິພາບບັນທຶກ PHP-FPM ເພື່ອແກ້ໄຂບັນຫາຢ່າງໄວວາ
- 5 ຣີສະຕາດ PHP-FPM ເປັນປະຈຳເພື່ອປ້ອງກັນການຮົ່ວໄຫຼຂອງໜ່ວຍຄວາມຈຳ
- 6 ຈະເປັນແນວໃດຖ້າບັນຫາຍັງຄົງຢູ່? ການເພີ່ມປະສິດທິພາບເພີ່ມເຕີມ!
- 7 ສະຫຼຸບ: ເພີ່ມປະສິດທິພາບ PHP-FPM ແລະເວັບໄຊທ໌ຈະບໍ່ crash ອີກຕໍ່ໄປ!
ເຈົ້າເຄີຍພົບສະຖານະການແບບນີ້ບໍ?ການເຂົ້າເຖິງເວັບໄຊທ໌ຊ້າລົງຢ່າງກະທັນຫັນ, ຫຼືແມ້ກະທັ້ງສົ່ງຜົນໃຫ້ເກີດຄວາມຜິດພາດ 500 ຫຼັງຈາກ restart PHP-FPM, ມັນກັບຄືນສູ່ປົກກະຕິ., ແຕ່ບັນຫາຈະປາກົດຄືນໃຫມ່ຫຼັງຈາກເວລາໃດຫນຶ່ງ? ອັນນີ້ມັນເສົ້າໃຈ!
ເປັນຫຍັງເຫດການນີ້ເກີດຂື້ນ?ໃນຄວາມເປັນຈິງ, ນີ້ແມ່ນປົກກະຕິແລ້ວກຸ່ມຂະບວນການ PHP-FPM ບໍ່ໄດ້ຖືກຕັ້ງຄ່າຢ່າງຖືກຕ້ອງ, ຫຼືຊັບພະຍາກອນຂອງເຄື່ອງແມ່ຂ່າຍບໍ່ພຽງພໍ.ເກີດຈາກ. ໃນມື້ນີ້, ພວກເຮົາຈະເພີ່ມປະສິດທິພາບຢ່າງລະອຽດ HestiaCP PHP-FPM ພາຍໃຕ້ hood ເຮັດໃຫ້ເວັບໄຊທ໌ມີຄວາມຫມັ້ນຄົງຄືກັບຫີນ!
ເຫດຜົນຫຼັກວ່າເປັນຫຍັງ PHP-FPM ແມ່ນ overloaded
PHP-FPM ເປັນຜູ້ຈັດການຂະບວນການ, ເຊິ່ງຮັບຜິດຊອບໃນການຈັດການການຮ້ອງຂໍແບບເຄື່ອນໄຫວ. ຖ້າການຕັ້ງຄ່າບໍ່ສົມເຫດສົມຜົນ, ມັນອາດຈະນໍາໄປສູ່:
- ຊັບພະຍາກອນເຊີບເວີໝົດແລ້ວ, ເຮັດໃຫ້ PHP-FPM ບໍ່ສາມາດຕອບສະຫນອງຄໍາຮ້ອງຂໍໃຫມ່ໄດ້ທັນເວລາ;
- ຂະບວນການຫນ້ອຍເກີນໄປ, ເມື່ອການຈະລາຈອນເພີ່ມຂຶ້ນຢ່າງກະທັນຫັນ, ມັນບໍ່ສາມາດດໍາເນີນການໄດ້ທັນເວລາ;
- ການນໍາໃຊ້ຂະບວນການສູງເກີນໄປ, ເຮັດໃຫ້ການໂຫຼດ CPU ລະເບີດ.

ວິທີການບອກວ່າ 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 ຖ້າທ່ານມັກມັນ! ການແບ່ງປັນ ແລະຖືກໃຈຂອງເຈົ້າເປັນແຮງຈູງໃຈຢ່າງຕໍ່ເນື່ອງຂອງພວກເຮົາ!