HestiaCP PHP-FPM is onder swaar las? Dinamiese webbladsy 500-fout? Hierdie optimalisering sal onmiddellik in werking tree!

Het jy al ooit hierdie situasie teëgekom?Toegang tot die webwerf het skielik verlangsaam, of het selfs gelei tot 'n 500-fout Nadat PHP-FPM weer begin is, het dit na normaal teruggekeer., maar die probleem verskyn weer na 'n rukkie? Dit is so frustrerend!

Waarom gebeur dit?Trouens, dit is gewoonlikDie PHP-FPM-prosespoel is nie behoorlik opgestel nie, of die bedienerhulpbronne is onvoldoende.veroorsaak deur. Vandag sal ons deeglik optimaliseer HestiaCP PHP-FPM geïnstalleer maak die webwerf so stabiel soos 'n rots!

Die kernrede waarom PHP-FPM oorlaai is

PHP-FPM is 'nProsesbestuurder, wat verantwoordelik is vir die hantering van dinamiese versoeke. As die konfigurasie nie redelik is nie, kan dit lei tot:

  • Bedienerhulpbronne is uitgeput, wat veroorsaak dat PHP-FPM nie betyds op nuwe versoeke kan reageer nie;
  • Te min prosesse, wanneer verkeer skielik toeneem, kan dit nie betyds verwerk word nie;
  • Prosesgebruik is te hoog, wat veroorsaak dat die SVE-lading ontplof.

HestiaCP PHP-FPM is onder swaar las? Dinamiese webbladsy 500-fout? Hierdie optimalisering sal onmiddellik in werking tree!

Hoe om te weet of PHP-FPM oorlaai is?

kan gebruik tophtop Opdrag om SVE en geheuegebruik te sien:

top -c

As jy prosesinligting soortgelyk aan die volgende sien, beteken dit dat PHP-FPM onder hoë las loop:

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

Sien jy hoe hierdie prosesse meer as 70% van die SVE opneem? As dit gereeld gebeur, sal jou PHP-FPM Daar moet 'n probleem wees!

So, hoe kan ons die PHP-FPM-konfigurasie optimaliseer sodat die bediener nie meer oorlaai word nie?

PHP-FPM proses swembad optimalisering (kern parameter aanpassing)

Eerstens, oop php-fpm Konfigurasie lêers:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Verander na jou PHP-weergawe, soos PHP8.3, en verander dit na hierdie:/etc/php/8.3/fpm/pool.d/www.conf

Vra die PHP-weergawe wat deur HestiaCP gestel is

v-list-web-domain user domain.com

Bv:

v-list-web-domain abc chenweiliang.com

In die uitset sal jy iets sien soos:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Dit beteken dat die webwerf gebruik PHP 8.3.

Kom ons kyk na jou PHP-FPM-konfigurasie:

[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

Jy kan sien dat jou pm Die een wat gebruik word is ondemand,Alhoewel dit hulpbrongebruik tydens ledige tyd kan verminder, kan die proses dalk nie betyds reageer wanneer verkeer skielik toeneem nie., wat lei tot 'n 500-fout.

1. Pas PHP-FPM proses swembad parameters aan

As die konfigurasie gebruik dynamicDit is 'n metode om sommige werkprosesse vooraf te begin en hulle dinamies aan te pas volgens die versoekvolume, wat vinniger kan reageer wanneer die versoekvolume skielik toeneem.

Vir webwerwe met 'n sekere hoeveelheid verkeer, word dit aanbeveel om te gebruik pm = dynamicOmdat dit 'n sekere hoeveelheid onaktiewe prosesse kan handhaaf en 500 foute tydens hoë gelyktydigheid kan vermy.

Dit word aanbeveel om dit slegs te gebruik wanneer die toegangsvolume uiters laag is en die geheuebronne beperk is. pm = ondemand Om hulpbronne te bespaar.

Voorgestel om ondemand, en optimaliseer pm.max_children En ander parameters:

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

Hoekom wil jy dit so verander?

  • pm = dynamic: Wys prosesse meer buigsaam toe om versoekewagting te vermy wat deur onaanvraag veroorsaak kan word;
  • pm.max_children = 16: Voorkom 500 foute wat deur te min prosesse veroorsaak word;
  • pm.start_servers = 5: Vermy stadige proses opstart;
  • pm.max_requests = 3000:Voorkom geheuelekkasies, herwin die proses gereeld.

2. Beperk die uitvoeringstyd van PHP-skrifte om langtermynbesetting te voorkom

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

Dit kan sommige voorkomPHP-skrifte wat te veel SVE gebruik, kan jou bediener laat val.

Nadat u gestoor het, herbegin die PHP-proses:

sudo systemctl restart php8.3-fpm

Aktiveer PHP-FPM-statusmonitering om tred te hou met die vordering te eniger tyd

Aktiveer PHP-FPM-prosesmonitering en bekyk dit enige tydHuidige aantal aktiewe prosesse en versoek wagstatus, om bedieneroorlaai te vermy.

php-fpm.conf Bygevoeg in:

pm.status_path = /status

Dan, Nginx-konfigurasie:

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

Op hierdie manier kan jy http://yourdomain.com/status Kyk na PHP-FPM in aksie!

Optimaliseer PHP-FPM-logboeke om probleme vinnig op te los

php-fpm.conf Voeg by:

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

Op hierdie manier, wanneer 'n 500-fout voorkom, kan u die log direk bekyk:

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

Kyk of PHP 'n fout rapporteer, soos out of memory,script execution timeout 等.

Herbegin PHP-FPM gereeld om geheuelekkasies te voorkom

in staat is om te slaag cron Herbegin PHP-FPM gereeld om te verhoed dat langlopende prosesse veroorsaakGeheue lek.

crontab -e

Voeg die volgende geskeduleerde taak by om PHP-FPM outomaties elke dag om 3:XNUMX te herbegin:

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

Wat as die probleem voortduur? Verdere optimalisering!

As jy steeds die bogenoemde optimalisering volgSoms kom 500 foute voor, kan jy voortgaan met die volgende optimalisering:

1. Aktiveer OPcache om PHP uitvoering doeltreffendheid te verbeter

As OPcache nog nie geaktiveer is nie, kan jy dit so installeer (gebruik Ubuntu as 'n voorbeeld):

sudo apt install php8.3-opcache -y

Redigeer dan php.ini:

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

Effek? PHP-bladsy uitvoering spoed is aansienlik verbeter!

2. Nginx konfigurasie optimalisering

Maak seker dat Nginx-verwante parameters redelik is, soos fastcgi_read_timeout Pas dit gepas aan om te voorkom dat PHP-skrifte deur Nginx beëindig word as gevolg van lang uitvoeringstyd:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Opsomming: Optimaliseer PHP-FPM en die webwerf sal nie meer ineenstort nie!

Watter aanpassings het ons gemaak na hierdie optimalisering?

✅ Optimalisering van die PHP-FPM-prosespoel,gebruik ondemandEn optimaliseer pm.max_children parameter;
Beperk die uitvoeringstyd van PHP-skrifte, om langtermyn CPU-besetting te voorkom;
Aktiveer PHP-FPM-monitering, bekyk die proseslading intyds;
Optimaliseer PHP-FPM logs, spoor 500 foute vinnig op;
Herbegin PHP-FPM gereeld, voorkom geheue lekkasies;
Aktiveer OPcache, verbeter PHP uitvoering doeltreffendheid;
Optimaliseer Nginx-konfigurasie, om uittelprobleme te vermy.

Na hierdie optimalisering sal die PHP-FPM-lading aansienlik verminder word en die webwerf-werking sal meer stabiel wees! 🔥

Gaan probeer dit nou! 💪🚀

发表 评论

Jou e-posadres sal nie gepubliseer word nie. Vereiste velde word gebruik * Etiket

Scroll na bo