Artikkelihakemisto
- 1 Ydinsyy, miksi PHP-FPM on ylikuormitettu
- 2 PHP-FPM prosessipoolin optimointi (ydinparametrien säätö)
- 3 Ota PHP-FPM-tilan seuranta käyttöön, jotta voit seurata edistymistä milloin tahansa
- 4 Optimoi PHP-FPM-lokit ongelmien nopeaan vianmääritykseen
- 5 Käynnistä PHP-FPM säännöllisesti uudelleen muistivuotojen estämiseksi
- 6 Entä jos ongelma jatkuu? Lisää optimointia!
- 7 Yhteenveto: Optimoi PHP-FPM, niin verkkosivusto ei enää kaadu!
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ää.

Mistä tietää, onko PHP-FPM ylikuormitettu?
voi käyttää top 或 htop 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-fpmOta 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! 💪🚀
Hope Chen Weiliang -blogi ( https://www.chenweiliang.com/ ) jaettu "HestiaCP PHP-FPM kuormitus on liian korkea? Dynaaminen verkkosivu 500 virhe? Tämä optimointi astuu voimaan välittömästi! ”, siitä voi olla sinulle apua.
Tervetuloa jakamaan tämän artikkelin linkki:https://www.chenweiliang.com/cwl-32512.html
Avataksesi lisää piilotettuja temppuja🔑, tervetuloa liittymään Telegram-kanavallemme!
Jaa ja tykkää jos pidät! Jakamasi ja tykkäyksesi ovat jatkuva motivaatiomme!