Ang HestiaCP PHP-FPM ay nasa ilalim ng mabigat na pagkarga? Dynamic na web page 500 error? Ang pag-optimize na ito ay magkakabisa kaagad!

Naranasan mo na ba ang ganitong sitwasyon?Biglang bumagal ang pag-access sa website, o nagresulta pa sa 500 na error Pagkatapos i-restart ang PHP-FPM, bumalik ito sa normal., ngunit lumilitaw muli ang problema pagkaraan ng ilang sandali? Nakakadismaya ito!

Bakit nangyayari ito?Sa katunayan, ito ay kadalasanHindi na-configure nang maayos ang pool ng proseso ng PHP-FPM, o hindi sapat ang mga mapagkukunan ng server.sanhi ng. Ngayon, lubusan naming i-optimize HestiaCP Ang naka-install na PHP-FPM ay ginagawang matatag ang website bilang isang bato!

Ang pangunahing dahilan kung bakit overloaded ang PHP-FPM

Ang PHP-FPM ay isangTagapamahala ng Proseso, na responsable para sa paghawak ng mga dynamic na kahilingan. Kung hindi makatwiran ang configuration, maaari itong humantong sa:

  • Ang mga mapagkukunan ng server ay ubos na, na nagiging sanhi ng PHP-FPM na hindi makatugon sa mga bagong kahilingan sa isang napapanahong paraan;
  • Napakakaunting proseso, kapag biglang tumaas ang trapiko, hindi ito maproseso sa oras;
  • Masyadong mataas ang paggamit ng proseso, na nagiging sanhi ng pag-load ng CPU upang sumabog.

Ang HestiaCP PHP-FPM ay nasa ilalim ng mabigat na pagkarga? Dynamic na web page 500 error? Ang pag-optimize na ito ay magkakabisa kaagad!

Paano malalaman kung overloaded ang PHP-FPM?

maaaring magamit top O htop Utos upang tingnan ang paggamit ng CPU at memorya:

top -c

Kung makakita ka ng impormasyon sa proseso na katulad ng sumusunod, nangangahulugan ito na tumatakbo ang PHP-FPM sa ilalim ng mataas na pagkarga:

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

Tingnan kung paano kinukuha ng mga prosesong ito ang higit sa 70% ng CPU? Kung madalas itong mangyari, ang iyong PHP-FPM Dapat may problema!

Kaya, paano natin ma-optimize ang configuration ng PHP-FPM para hindi na ma-overload ang server?

PHP-FPM process pool optimization (core parameter adjustment)

Una, buksan php-fpm File ng configuration:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Baguhin sa iyong bersyon ng PHP, gaya ng PHP8.3, at palitan ito ng ganito:/etc/php/8.3/fpm/pool.d/www.conf

Itanong ang bersyon ng PHP na itinakda ng HestiaCP

v-list-web-domain user domain.com

E.g:

v-list-web-domain abc chenweiliang.com

Sa output, makikita mo ang isang bagay tulad ng:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Nangangahulugan ito na ang website ay gumagamit PHP 8.3.

Tingnan natin ang iyong configuration ng 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

Maaari mong makita na ang iyong pm Ang ginamit ay ondemand,Bagama't maaari nitong bawasan ang paggamit ng mapagkukunan sa oras ng idle, kapag biglang tumaas ang trapiko, maaaring hindi makatugon ang proseso sa oras., na nagreresulta sa isang 500 error.

www.conf: Ang built-in na "universal resource pool" ng sistema

Pagkatapos i-install ang PHP-FPM, awtomatikong magbibigay sa iyo ang sistema ng... www.conf file
nitoPagpoposisyonNapakasimple lang nito—isa lamang itong default na process pool na gumagana agad, kadalasang nakakabit sa... www-data Pag-download ng gumagamit.

Ang ganitong uri ng pool ay partikular na angkop para sa mga single-site na kapaligiran: ang configuration ay magaan, at ang mga parameter ay pawang mga generic na template, tulad ng:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5

Kung iisa lang ang site na iyong ini-host, magagamit mo ito nang direkta at maaasahan nang walang anumang karagdagang abala.

etufo.org.conf: Pasadyang pool

Kapag nagpapatakbo ka na ng maraming site, hindi mo maaaring pagsiksikan ang lahat sa iisang pool.
Sa puntong ito, awtomatikong lilikha ang HestiaCP ng hiwalay na pool para sa bawat site, halimbawa... etufo.org.confEspesyalisado para sa mga pangalan ng domain etufo.org 服务。

Ang karaniwang paraan ng paglalaro ay:

  • Baguhin ang mga user at grupo:user = etufo,group = etufo
  • Malayang pagsubaybay:listen = /run/php/etufo.sock
  • Ang pagsasaayos ng bilang ng mga proseso ay nagsisiguro ng matibay na katatagan kahit na sa ilalim ng mataas na sabay-sabay na operasyon.
  • Mas malinaw na nagagawa ng magkakahiwalay na log file ang pag-troubleshoot.

Ang mga benepisyo ay halata:Ligtas na paghihiwalayKahit na nakompromiso ang isang site, mananatiling hindi maaapektuhan ang iba pang mga site.

dummy.conf: dummy na file

dummy.conf Kadalasan, ito ay mga halimbawa o template na ibinibigay ng sistema.
Hindi talaga ito tatakbo maliban kung manu-mano mo itong babaguhin at paganahin.
Ang kahalagahan nito ay mas katulad ng isang "manwal ng operasyon," na nagsasabi sa iyo kung paano sumulat ng isang bagong configuration ng pool.

Bakit hinahati ang pool?

  • 安全 性Gumamit ng iba't ibang user para sa iba't ibang site upang maiwasan ang magkasalungat na pahintulot.
  • 性能优化Ang bilang ng mga proseso ay maaaring isa-isang isaayos para sa bawat pool, na nagbibigay-daan para sa mga nababaluktot na pagsasaayos batay sa demand ng trapiko.
  • IsolationAng mga log, error, at listening address ay pinaghihiwalay lahat, na ginagawang mas madali ang pag-troubleshoot.

Halimbawa: kahit na www.conf Gumuho ito.etufo.org.conf Tatakbo pa rin ito nang normal at hindi nito mapapabagsak ang buong server.

实际场景

  • Server na may iisang site: sapat na ang www.conf.
  • Multisite serverAng bawat site ay may kanya-kanyang hiwalay na .conf file, tulad ng etufo.org.conf.
  • dummy.confPara sa sanggunian lamang, hindi inirerekomenda.

Paghahambing ng Konfigurasyon

www.conf (default na pool)

[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5

etufo.org.conf (Pasadyang Pool)

[etufo.org]
user = etufo
group = etufo
listen = /run/php/etufo.sock
pm = dynamic
pm.max_children = 20
access.log = /var/log/php-fpm/etufo.access.log

Ang pangunahing pagkakaiba ay:Pagkakakilanlan ng gumagamit, address ng pakikinig, bilang ng mga proseso.

1. Ayusin ang mga parameter ng pool ng proseso ng PHP-FPM

Kung gumagamit ang configuration dynamicIsa itong paraan ng paunang pagsisimula ng ilang proseso ng trabaho at dynamic na pagsasaayos ng mga ito ayon sa dami ng kahilingan, na maaaring tumugon nang mas mabilis kapag biglang tumaas ang dami ng kahilingan.

Para sa mga website na may tiyak na dami ng trapiko, inirerekomendang gamitin pm = dynamicDahil maaari itong mapanatili ang isang tiyak na dami ng mga idle na proseso at maiwasan ang 500 mga error sa panahon ng mataas na concurrency.

Inirerekomenda na gamitin lamang ito kapag ang dami ng pag-access ay napakababa at ang mga mapagkukunan ng memorya ay masikip. pm = ondemand Upang makatipid ng mga mapagkukunan.

Iminungkahi sa dynamic, at i-optimize pm.max_children At iba pang mga parameter:

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 后自动退出

Bakit gusto mong baguhin ito ng ganito?

  • pm = dynamic: Maglaan ng mga proseso nang mas flexible upang maiwasan ang paghihintay ng kahilingan na maaaring sanhi ng ondemand;
  • pm.max_children = 16: Pigilan ang 500 error na dulot ng napakakaunting proseso;
  • pm.start_servers = 5: Iwasan ang mabagal na proseso ng pagsisimula;
  • pm.max_requests = 3000:Pag-iwas sa pagtagas ng memorya, regular na i-recycle ang proseso.

2. Limitahan ang oras ng pagpapatupad ng mga script ng PHP upang maiwasan ang pangmatagalang occupancy

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

Maiiwasan nito ang ilanMaaaring ibagsak ng mga PHP script na gumagamit ng masyadong maraming CPU ang iyong server.

Pagkatapos i-save, i-restart ang proseso ng PHP:

sudo systemctl restart php8.3-fpm

Paganahin ang pagsubaybay sa status ng PHP-FPM upang masubaybayan ang pag-unlad anumang oras

Paganahin ang pagsubaybay sa proseso ng PHP-FPM at tingnan ito anumang orasKasalukuyang bilang ng mga aktibong proseso at kahilingan sa status ng paghihintay, para maiwasan ang overloading ng server.

php-fpm.conf Idinagdag sa:

pm.status_path = /status

Pagkatapos, ang pagsasaayos ng 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;
}

Sa ganitong paraan, magagawa mo http://yourdomain.com/status Tingnan ang PHP-FPM sa aksyon!

I-optimize ang PHP-FPM logs para mabilis na ma-troubleshoot ang mga problema

php-fpm.conf Idagdag sa:

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 的脚本记录到日志

Sa ganitong paraan, sa tuwing may 500 error na nangyayari, maaari mong direktang tingnan ang log:

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

Tingnan kung ang PHP ay nag-uulat ng isang error, tulad ng out of memory,script execution timeout Maghintay.

I-restart ang PHP-FPM nang regular upang maiwasan ang mga pagtagas ng memorya

nakapasa cron I-restart ang PHP-FPM nang regular upang maiwasan ang mga prosesong matagal nang nagdudulotMemory Leaks.

crontab -e

Idagdag ang sumusunod na naka-iskedyul na gawain upang awtomatikong i-restart ang PHP-FPM sa 3 am araw-araw:

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

Paano kung magpapatuloy ang problema? Karagdagang pag-optimize!

Kung susundin mo pa rin ang pag-optimize sa itaasPaminsan-minsan, nangyayari ang 500 error, maaari kang magpatuloy sa mga sumusunod na pag-optimize:

1. Paganahin ang OPcache upang mapabuti ang kahusayan sa pagpapatupad ng PHP

Kung ang OPcache ay hindi pa pinagana, maaari mo itong i-install tulad nito (gamit ang Ubuntu bilang isang halimbawa):

sudo apt install php8.3-opcache -y

Pagkatapos ay i-edit php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • I-disable ang real-time na pag-detectBawasan ang I/O ng file system at pagbutihin ang performance.
  • Gayunpaman, nangangahulugan ito na dapat mong manu-manong i-clear ang cache (i-restart ang serbisyo ng PHP) pagkatapos baguhin ang mga PHP file.

Pagkatapos baguhin ang configuration, kailangan mong i-restart ang PHP service para magkabisa ang mga pagbabago.

sudo systemctl restart php<版本>-fpm

Epekto? Ang bilis ng pagpapatupad ng pahina ng PHP ay lubos na napabuti!

2. Pag-optimize ng configuration ng Nginx

Siguraduhin na ang mga parameter na nauugnay sa Nginx ay makatwiran, tulad ng fastcgi_read_timeout Ayusin ito nang naaangkop upang maiwasan ang mga script ng PHP na winakasan ng Nginx dahil sa mahabang oras ng pagpapatupad:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Buod: I-optimize ang PHP-FPM at hindi na mag-crash ang website!

Anong mga pagsasaayos ang ginawa namin pagkatapos ng pag-optimize na ito?

✅ Pag-optimize sa pool ng proseso ng PHP-FPM, gamitin ondemandAt i-optimize pm.max_children parameter;
Nililimitahan ang oras ng pagpapatupad ng mga script ng PHP, upang maiwasan ang pangmatagalang trabaho sa CPU;
Paganahin ang pagsubaybay sa PHP-FPM, tingnan ang proseso ng pagkarga sa real time;
Pag-optimize ng mga log ng PHP-FPM, mabilis na i-troubleshoot ang 500 error;
I-restart ang PHP-FPM nang regular, maiwasan ang pagtagas ng memorya;
Paganahin ang OPcache, pagbutihin ang kahusayan sa pagpapatupad ng PHP;
Pag-optimize ng Nginx Configuration, para maiwasan ang mga isyu sa timeout.

Pagkatapos ng pag-optimize na ito, ang pag-load ng PHP-FPM ay lubos na mababawasan at ang pagpapatakbo ng website ay magiging mas matatag! 🔥

Subukan ito ngayon! 💪🚀

发表 评论

Ang iyong email address ay hindi maipa-publish. 必填 项 已 用 * Tatak

Artikulo Direktoryo
Mag-scroll sa Tuktok