Je HestiaCP PHP-FPM pod veliko obremenitvijo? Napaka dinamične spletne strani 500? Ta optimizacija bo začela veljati takoj!

Ste se že kdaj srečali s to situacijo?Dostop do spletnega mesta se je nenadoma upočasnil ali celo povzročil napako 500. Po ponovnem zagonu PHP-FPM se je vrnil v normalno stanje., vendar se težava čez nekaj časa spet pojavi? To je tako frustrirajoče!

Zakaj se to dogaja?Pravzaprav je to običajnoPodročje procesov PHP-FPM ni pravilno konfigurirano ali pa viri strežnika niso zadostni.ki jih povzroča. Danes bomo temeljito optimizirali HestiaCP PHP-FPM pod pokrovom naredi spletno stran stabilno kot kamen!

Glavni razlog, zakaj je PHP-FPM preobremenjen

PHP-FPM je aUpravitelj procesov, ki je odgovoren za obravnavanje dinamičnih zahtev. Če konfiguracija ni razumna, lahko povzroči:

  • Viri strežnika so izčrpani, zaradi česar se PHP-FPM ne more pravočasno odzvati na nove zahteve;
  • Premalo procesov, ko se promet nenadoma poveča, ga ni mogoče pravočasno obdelati;
  • Uporaba postopka je previsoka, zaradi česar obremenitev procesorja eksplodira.

Je HestiaCP PHP-FPM pod veliko obremenitvijo? Napaka dinamične spletne strani 500? Ta optimizacija bo začela veljati takoj!

Kako ugotoviti, ali je PHP-FPM preobremenjen?

lahko uporabi tophtop Ukaz za ogled porabe procesorja in pomnilnika:

top -c

Če vidite informacije o procesu, podobne naslednjim, to pomeni, da se PHP-FPM izvaja pod visoko obremenitvijo:

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

Vidite, kako ti procesi zasedajo več kot 70 % CPU? Če se to pogosto dogaja, vaš PHP-FPM Mora biti problem!

Kako lahko torej optimiziramo konfiguracijo PHP-FPM, da strežnik ne bo več preobremenjen?

Optimizacija bazena procesov PHP-FPM (prilagoditev osnovnih parametrov)

Najprej odprite php-fpm Konfiguracijske datoteke:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Spremenite na svojo različico PHP, na primer PHP8.3, in jo spremenite v to:/etc/php/8.3/fpm/pool.d/www.conf

Poizvedba o različici PHP, ki jo je nastavil HestiaCP

v-list-web-domain user domain.com

E.g:

v-list-web-domain abc chenweiliang.com

V izhodu boste videli nekaj takega:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

To pomeni, da spletno mesto uporablja PHP 8.3.

Oglejmo si vašo konfiguracijo 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

Lahko vidite, da je vaš pm uporabljen je ondemand,Čeprav lahko zmanjša porabo virov med mirovanjem, ko se promet nenadoma poveča, se proces morda ne bo mogel pravočasno odzvati., kar povzroči napako 500.

1. Prilagodite parametre področja procesov PHP-FPM

Če konfiguracija uporablja dynamicTo je metoda predhodnega zagona nekaterih delovnih procesov in njihovega dinamičnega prilagajanja glede na količino zahtev, kar omogoča hitrejši odziv, ko se količina zahtev nenadoma poveča.

Za spletna mesta z določeno količino prometa je priporočljivo uporabljati pm = dynamicKer lahko vzdržuje določeno količino mirujočih procesov in se izogne ​​500 napakam med visoko sočasnostjo.

Priporočljivo ga je uporabljati le, če je obseg dostopa izjemno nizek in so pomnilniški viri omejeni. pm = ondemand Za varčevanje z viri.

Predlagano za ondemand, in optimizirajte pm.max_children In drugi parametri:

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

Zakaj ga želite tako spremeniti?

  • pm = dynamic: bolj prožno dodelite procese, da se izognete čakanju na zahtevo, ki ga lahko povzroči ondemand;
  • pm.max_children = 16: Preprečite 500 napak, ki jih povzroča premalo procesov;
  • pm.start_servers = 5: Izogibajte se počasnemu zagonu procesa;
  • pm.max_requests = 3000:Preprečevanje uhajanja spomina, postopek redno reciklirajte.

2. Omejite čas izvajanja PHP skriptov, da preprečite dolgotrajno zasedenost

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

To lahko nekatere preprečiSkripti PHP, ki uporabljajo preveč procesorja, lahko uničijo vaš strežnik.

Po shranjevanju znova zaženite PHP proces:

sudo systemctl restart php8.3-fpm

Omogočite nadzor stanja PHP-FPM, da lahko kadar koli spremljate napredek

Omogočite nadzor procesa PHP-FPM in si ga oglejte kadar koliTrenutno število aktivnih procesov in čakajoče stanje zahteve, da preprečite preobremenitev strežnika.

php-fpm.conf Dodano v:

pm.status_path = /status

Nato konfiguracija 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;
}

Na ta način lahko http://yourdomain.com/status Preverite PHP-FPM v akciji!

Optimizirajte dnevnike PHP-FPM za hitro odpravljanje težav

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

Na ta način si lahko vsakič, ko pride do napake 500, neposredno ogledate dnevnik:

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

Preverite, ali PHP poroča o napaki, kot npr out of memory,script execution timeout 等.

Redno znova zaženite PHP-FPM, da preprečite uhajanje pomnilnika

sposoben mimo cron Redno znova zaženite PHP-FPM, da preprečite, da bi dolgotrajni procesi povzročiliPuščanje pomnilnika.

crontab -e

Dodajte naslednje načrtovano opravilo za samodejni ponovni zagon PHP-FPM vsak dan ob 3. uri:

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

Kaj pa, če se težava nadaljuje? Nadaljnja optimizacija!

Če še vedno sledite zgornji optimizacijiObčasno se pojavi 500 napak, lahko nadaljujete z naslednjimi optimizacijami:

1. Omogočite OPcache za izboljšanje učinkovitosti izvajanja PHP

Če OPcache še ni omogočen, ga lahko namestite takole (z uporabo Ubuntuja kot primera):

sudo apt install php8.3-opcache -y

Nato uredite php.ini:

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

Učinek? Hitrost izvajanja strani PHP je bila močno izboljšana!

2. Optimizacija konfiguracije Nginx

Prepričajte se, da so parametri, povezani z Nginxom, razumni, kot npr fastcgi_read_timeout Ustrezno ga prilagodite, da preprečite, da bi Nginx prekinil skripte PHP zaradi dolgega časa izvajanja:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Povzetek: Optimizirajte PHP-FPM in spletna stran se ne bo več sesula!

Kakšne prilagoditve smo naredili po tej optimizaciji?

✅ Optimizacija nabora procesov PHP-FPM,uporaba ondemandIn optimizirajte pm.max_children parameter;
Omejitev časa izvajanja PHP skriptov, za preprečitev dolgotrajne zasedenosti procesorja;
Omogoči nadzor PHP-FPM, ogled obremenitve procesa v realnem času;
Optimizacija dnevnikov PHP-FPM, hitro odpravite 500 napak;
Redno znova zaženite PHP-FPM, preprečiti uhajanje spomina;
Omogoči OPcache, izboljša učinkovitost izvajanja PHP;
Optimizacija konfiguracije Nginx, da se izognete težavam s časovno omejitvijo.

Po tej optimizaciji se bo obremenitev PHP-FPM močno zmanjšala in delovanje spletne strani bo bolj stabilno! 🔥

Pojdi poskusiti zdaj! 💪🚀

发表 评论

您的邮箱地址不会被公开。 必填 项 已 用 * Oznaka

Pomaknite se na vrh