HestiaCP PHP-FPM je pod velikim opterećenjem? Greška 500 dinamičke web stranice? Ova optimizacija stupa na snagu odmah!

Da li ste se ikada susreli sa ovom situacijom?Pristup web stranici se iznenada usporio, ili je čak rezultirao greškom od 500 Nakon ponovnog pokretanja PHP-FPM-a, vratio se u normalu., ali se problem ponovo pojavljuje nakon nekog vremena? Ovo je tako frustrirajuće!

Zašto se ovo događa?U stvari, to je običnoPHP-FPM spremište procesa nije pravilno konfigurisano ili su resursi servera nedovoljni.uzrokovano. Danas ćemo temeljno optimizirati HestiaCP PHP-FPM ispod haube čini web stranicu stabilnom kao kamen!

Osnovni razlog zašto je PHP-FPM preopterećen

PHP-FPM je aProcess Manager, koji je odgovoran za rukovanje dinamičkim zahtjevima. Ako konfiguracija nije razumna, može dovesti do:

  • Resursi servera su iscrpljeni, što uzrokuje da PHP-FPM ne može blagovremeno odgovoriti na nove zahtjeve;
  • Premalo procesa, kada se promet naglo poveća, ne može se obraditi na vrijeme;
  • Upotreba procesa je previsoka, što uzrokuje eksploziju opterećenja CPU-a.

HestiaCP PHP-FPM je pod velikim opterećenjem? Greška 500 dinamičke web stranice? Ova optimizacija stupa na snagu odmah!

Kako znati da li je PHP-FPM preopterećen?

mogu koristiti tophtop Naredba za pregled upotrebe CPU-a i memorije:

top -c

Ako vidite informacije o procesu slične sljedećoj, to znači da PHP-FPM radi pod velikim opterećenjem:

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 ovi procesi zauzimaju preko 70% CPU-a? Ako se ovo često dešava, vaš PHP-FPM Mora postojati problem!

Dakle, kako možemo optimizirati PHP-FPM konfiguraciju tako da server više ne bude preopterećen?

PHP-FPM optimizacija skupa procesa (podešavanje osnovnih parametara)

Prvo, otvorite php-fpm Konfiguracijski fajlovi:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Promijenite na svoju PHP verziju, kao što je PHP8.3, i promijenite je u ovo:/etc/php/8.3/fpm/pool.d/www.conf

Upitajte PHP verziju koju je postavio HestiaCP

v-list-web-domain user domain.com

E.g:

v-list-web-domain abc chenweiliang.com

U izlazu ćete vidjeti nešto poput:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

To znači da web stranica koristi PHP 8.3.

Pogledajmo vašu PHP-FPM konfiguraciju:

[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

Možete vidjeti da je vaš pm Onaj koji se koristi je ondemand,Iako može smanjiti upotrebu resursa tokom vremena mirovanja, kada se promet naglo poveća, proces možda neće moći odgovoriti na vrijeme., što rezultira greškom 500.

1. Podesite PHP-FPM parametre spremišta procesa

Ako konfiguracija koristi dynamicOvo je metoda prethodnog pokretanja nekih radnih procesa i njihovog dinamičkog prilagođavanja prema obimu zahtjeva, što omogućava brži odgovor kada se obim zahtjeva naglo poveća.

Za web stranice s određenom količinom prometa preporučuje se korištenje pm = dynamicZato što može održavati određeni broj neaktivnih procesa i izbjeći 500 grešaka tokom visoke konkurentnosti.

Preporučuje se korištenje samo kada je volumen pristupa izuzetno nizak, a memorijski resursi ograničeni. pm = ondemand Da se uštede resursi.

Suggested to ondemand, i optimizirati pm.max_children I ostali 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 后自动退出

Zašto to želite ovako promijeniti?

  • pm = dynamic: Alocirajte procese fleksibilnije kako biste izbjegli čekanje zahtjeva koje može biti uzrokovano ondemand;
  • pm.max_children = 16: Sprečiti 500 grešaka uzrokovanih premalo procesa;
  • pm.start_servers = 5: Izbjegavajte sporo pokretanje procesa;
  • pm.max_requests = 3000:Sprečavanje curenja memorije, redovno reciklirajte proces.

2. Ograničite vrijeme izvršavanja PHP skripti kako biste spriječili dugotrajnu zauzetost

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

Ovo može spriječiti nekePHP skripte koje koriste previše CPU-a mogu srušiti vaš server.

Nakon spremanja, ponovo pokrenite PHP proces:

sudo systemctl restart php8.3-fpm

Omogućite praćenje statusa PHP-FPM da biste pratili napredak u bilo kom trenutku

Omogućite praćenje procesa PHP-FPM i pogledajte ga u bilo koje vrijemeTrenutni broj aktivnih procesa i status zahtjeva na čekanju, kako biste izbjegli preopterećenje servera.

php-fpm.conf Dodato u:

pm.status_path = /status

Zatim, Nginx konfiguracija:

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 ovaj način možete http://yourdomain.com/status Provjerite PHP-FPM u akciji!

Optimizirajte PHP-FPM dnevnike za brzo rješavanje problema

php-fpm.conf Dodaj u:

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 ovaj način, kad god se pojavi greška 500, možete direktno pogledati dnevnik:

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

Pogledajte da li PHP prijavljuje grešku, kao što je out of memory,script execution timeout Čekaj.

Redovno restartujte PHP-FPM da biste sprečili curenje memorije

u stanju da prođe cron Redovno ponovo pokrenite PHP-FPM kako biste spriječili da izazovu dugotrajni procesiMemory Leaks.

crontab -e

Dodajte sljedeći zakazani zadatak da automatski ponovo pokrenete PHP-FPM u 3 ujutro svakog dana:

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

Šta ako problem i dalje postoji? Dalja optimizacija!

Ako i dalje slijedite gornju optimizacijuPovremeno se javlja 500 grešaka, možete nastaviti sa sljedećim optimizacijama:

1. Omogućite OPcache da poboljšate efikasnost izvršavanja PHP-a

Ako OPcache još nije omogućen, možete ga instalirati ovako (koristeći Ubuntu kao primjer):

sudo apt install php8.3-opcache -y

Zatim uredi php.ini:

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

Efekat? Brzina izvršavanja PHP stranice je znatno poboljšana!

2. Optimizacija Nginx konfiguracije

Uvjerite se da su parametri povezani s Nginxom razumni, kao što su fastcgi_read_timeout Prilagodite ga na odgovarajući način kako biste izbjegli da Nginx prekine PHP skripte zbog dugog vremena izvršavanja:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Sažetak: Optimizirajte PHP-FPM i web stranica se više neće rušiti!

Koje smo prilagodbe izvršili nakon ove optimizacije?

✅ Optimizacija PHP-FPM skupa procesa, koristite ondemandI optimizirati pm.max_children parametar;
Ograničavanje vremena izvršavanja PHP skripti, za sprečavanje dugotrajne okupacije CPU-a;
Omogućite PHP-FPM praćenje, pregled opterećenja procesa u realnom vremenu;
Optimizacija PHP-FPM dnevnika, brzo otkloniti 500 grešaka;
Ponovo pokrenite PHP-FPM redovno, spriječiti curenje memorije;
Omogućite OPcache, poboljšati efikasnost izvršavanja PHP-a;
Optimizacija Nginx konfiguracije, kako biste izbjegli probleme s timeoutom.

Nakon ove optimizacije, PHP-FPM opterećenje će biti znatno smanjeno i rad web stranice će biti stabilniji! 🔥

Idi probaj sada! 💪🚀

Komentari

Vaša email adresa neće biti objavljena. Koriste se obavezna polja * Oznaka

Dođite na vrh