Onko HestiaCP PHP-FPM raskaan kuormituksen alla? Dynaaminen verkkosivu 500 virhe? Tämä optimointi astuu voimaan välittömästi!

Oletko koskaan törmännyt tähän tilanteeseen?Verkkosivuston käyttö hidastui yhtäkkiä tai johti jopa 500-virheeseen PHP-FPM:n uudelleenkäynnistyksen jälkeen., mutta ongelma ilmaantuu uudelleen jonkin ajan kuluttua? Tämä on niin turhauttavaa!

Miksi tämä tapahtuu?Itse asiassa tämä on yleensäPHP-FPM-prosessipoolia ei ole määritetty oikein tai palvelinresurssit eivät riitä.aiheuttama. Tänään optimoimme perusteellisesti HestiaCP PHP-FPM asennettuna tekee sivustosta vakaan kuin kallion!

Ydinsyy, miksi PHP-FPM on ylikuormitettu

PHP-FPM on aProsessin johtaja, joka vastaa dynaamisten pyyntöjen käsittelystä. Jos kokoonpano ei ole kohtuullinen, se voi johtaa:

  • Palvelinresurssit ovat lopussa, mikä aiheuttaa sen, että PHP-FPM ei pysty vastaamaan uusiin pyyntöihin ajoissa;
  • Liian vähän prosesseja, kun liikenne äkillisesti lisääntyy, sitä ei voida käsitellä ajoissa;
  • Prosessin käyttö on liian korkea, jolloin suorittimen kuormitus räjähtää.

Onko HestiaCP PHP-FPM raskaan kuormituksen alla? Dynaaminen verkkosivu 500 virhe? Tämä optimointi astuu voimaan välittömästi!

Mistä tietää, onko PHP-FPM ylikuormitettu?

voi käyttää tophtop Komento näyttää suorittimen ja muistin käyttö:

top -c

Jos näet seuraavankaltaisia ​​prosessitietoja, se tarkoittaa, että PHP-FPM toimii suurella kuormituksella:

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

Näetkö, kuinka nämä prosessit vievät yli 70 % suorittimesta? Jos näin tapahtuu usein, PHP-FPM Siinä täytyy olla ongelma!

Joten kuinka voimme optimoida PHP-FPM-kokoonpanon niin, että palvelin ei enää ole ylikuormitettu?

PHP-FPM prosessipoolin optimointi (ydinparametrien säätö)

Ensin, avaa php-fpm Asetustiedostot:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Vaihda PHP-versioosi, kuten PHP8.3, ja muuta se tähän:/etc/php/8.3/fpm/pool.d/www.conf

HestiaCP:n asettaman PHP-version kysely

v-list-web-domain user domain.com

Esimerkiksi:

v-list-web-domain abc chenweiliang.com

Tulosteessa näet jotain seuraavanlaista:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Tämä tarkoittaa, että sivusto käyttää PHP 8.3.

Katsotaanpa PHP-FPM-konfiguraatiotasi:

[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

Voit nähdä, että sinun pm Käytetty on ondemand,Vaikka se voi vähentää resurssien käyttöä lepotilan aikana, liikenteen äkillisesti lisääntyessä prosessi ei ehkä pysty vastaamaan ajoissa., jolloin tuloksena on 500 virhe.

1. Säädä PHP-FPM-prosessipooliparametreja

Jos kokoonpano käyttää dynamicTämä on menetelmä, jolla voidaan käynnistää joitakin työprosesseja etukäteen ja säätää niitä dynaamisesti pyyntöjen määrän mukaan, mikä voi reagoida nopeammin, kun pyyntöjen määrä äkillisesti kasvaa.

Verkkosivustoille, joilla on tietty määrä liikennettä, on suositeltavaa käyttää pm = dynamicKoska se pystyy ylläpitämään tietyn määrän käyttämättömiä prosesseja ja välttämään 500 virhettä suuren samanaikaisuuden aikana.

Sitä suositellaan käytettäväksi vain silloin, kun käyttöoikeusmäärä on erittäin pieni ja muistiresurssit ovat tiukat. pm = ondemand Resurssien säästämiseksi.

Ehdotettu vaihtamista ondemandja optimoida pm.max_children Ja muut parametrit:

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

Miksi haluat muuttaa sen näin?

  • pm = dynamic: Kohdista prosesseja joustavammin välttääksesi pyyntöjen odottamisen, joka voi aiheutua ondemandista;
  • pm.max_children = 16: Estä 500 virheet, jotka johtuvat liian harvoista prosesseista;
  • pm.start_servers = 5: Vältä hidasta prosessin käynnistystä;
  • pm.max_requests = 3000:Muistivuotojen estäminen, kierrätä prosessi säännöllisesti.

2. Rajoita PHP-komentosarjojen suoritusaikaa estääksesi pitkäaikaisen käytön

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

Tämä voi estää joitakinPHP-skriptit, jotka käyttävät liikaa suoritinta, voivat kaataa palvelimesi.

Käynnistä PHP-prosessi uudelleen tallennuksen jälkeen:

sudo systemctl restart php8.3-fpm

Ota PHP-FPM-tilan seuranta käyttöön, jotta voit seurata edistymistä milloin tahansa

Ota PHP-FPM-prosessin valvonta käyttöön ja katso se milloin tahansaNykyinen aktiivisten prosessien määrä ja pyynnön odotustilapalvelimen ylikuormituksen välttämiseksi.

php-fpm.conf Lisätty:

pm.status_path = /status

Sitten Nginx-kokoonpano:

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

Tällä tavalla voit http://yourdomain.com/status Katso PHP-FPM toiminnassa!

Optimoi PHP-FPM-lokit ongelmien nopeaan vianmääritykseen

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

Tällä tavalla voit tarkastella lokia suoraan aina 500-virheen sattuessa:

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

Katso, raportoiko PHP virheestä, esim out of memory,script execution timeout 等.

Käynnistä PHP-FPM säännöllisesti uudelleen muistivuotojen estämiseksi

pystyy ohittamaan cron Käynnistä PHP-FPM uudelleen säännöllisesti estääksesi pitkäaikaisia ​​prosesseja aiheuttamastaMuistivuotoja.

crontab -e

Lisää seuraava ajoitettu tehtävä käynnistääksesi PHP-FPM:n automaattisesti uudelleen joka päivä klo 3:XNUMX:

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

Entä jos ongelma jatkuu? Lisää optimointia!

Jos noudatat edelleen yllä olevaa optimointiaJoskus tapahtuu 500 virhettä, voit jatkaa seuraavilla optimoinnilla:

1. Ota OPcache käyttöön parantaaksesi PHP:n suoritustehokkuutta

Jos OPcache ei ole vielä käytössä, voit asentaa sen seuraavasti (käyttäen Ubuntua esimerkkinä):

sudo apt install php8.3-opcache -y

Muokkaa sitten php.ini:

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

Vaikutus? PHP-sivun suoritusnopeus on parantunut huomattavasti!

2. Nginx-kokoonpanon optimointi

Varmista, että Nginxiin liittyvät parametrit ovat kohtuullisia, kuten fastcgi_read_timeout Säädä se asianmukaisesti, jotta Nginx ei lopeta PHP-skriptejä pitkän suoritusajan vuoksi:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Yhteenveto: Optimoi PHP-FPM, niin verkkosivusto ei enää kaadu!

Mitä muutoksia olemme tehneet tämän optimoinnin jälkeen?

✅ PHP-FPM-prosessipoolin optimointi,käyttää ondemandJa optimoida pm.max_children parametri;
PHP-skriptien suoritusajan rajoittaminen, estääksesi pitkäaikaisen suorittimen käytön;
Ota PHP-FPM-valvonta käyttöön, tarkastella prosessin kuormitusta reaaliajassa;
PHP-FPM-lokien optimointi, vianmääritys nopeasti 500 virhettä;
Käynnistä PHP-FPM säännöllisesti, estää muistivuotoja;
Ota OPcache käyttöön, parantaa PHP:n suoritustehokkuutta;
Nginx-kokoonpanon optimointi, välttääksesi aikakatkaisuongelmia.

Tämän optimoinnin jälkeen PHP-FPM-kuorma vähenee huomattavasti ja verkkosivuston toiminta on vakaampaa! 🔥

Mene kokeilemaan nyt! 💪🚀

发表 评论

Sähköpostiosoitettasi ei julkaista. 必填 项 已 用 * 标注

Siirry alkuun