Ar HestiaCP PHP-FPM yra didelė apkrova? Dinaminio tinklalapio 500 klaida? Šis optimizavimas įsigalios iš karto!

Ar kada nors susidūrėte su tokia situacija?Prieiga prie svetainės staiga sulėtėjo arba netgi įvyko 500 klaida. Iš naujo paleidus PHP-FPM, ji grįžo į normalią būseną., bet problema vėl išryškėja po kurio laiko? Tai taip varginanti!

Kodėl taip yra?Tiesą sakant, tai paprastai yraPHP-FPM procesų telkinys nėra tinkamai sukonfigūruotas arba serverio išteklių nepakanka.sukeltas. Šiandien mes kruopščiai optimizuosime HestiaCP PHP-FPM po gaubtu daro svetainę stabilią kaip uola!

Pagrindinė priežastis, kodėl PHP-FPM yra perkrautas

PHP-FPM yra aProceso vadovas, kuri yra atsakinga už dinaminių užklausų tvarkymą. Jei konfigūracija nėra pagrįsta, tai gali sukelti:

  • Serverio ištekliai išnaudoti, todėl PHP-FPM negali laiku atsakyti į naujas užklausas;
  • Per mažai procesų, staiga padidėjus srautui, jo negalima apdoroti laiku;
  • Proceso naudojimas yra per didelis, todėl procesoriaus apkrova sprogsta.

Ar HestiaCP PHP-FPM yra didelė apkrova? Dinaminio tinklalapio 500 klaida? Šis optimizavimas įsigalios iš karto!

Kaip sužinoti, ar PHP-FPM yra perkrautas?

gali naudoti top Arba htop Komanda, skirta peržiūrėti procesoriaus ir atminties naudojimą:

top -c

Jei matote proceso informaciją, panašią į toliau pateiktą, tai reiškia, kad PHP-FPM veikia esant didelei apkrovai:

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

Pažiūrėkite, kaip šie procesai užima daugiau nei 70% procesoriaus? Jei taip nutinka dažnai, jūsų PHP-FPM Turi būti problema!

Taigi, kaip optimizuoti PHP-FPM konfigūraciją, kad serveris nebebūtų perkrautas?

PHP-FPM procesų telkinio optimizavimas (pagrindinių parametrų reguliavimas)

Pirma, atidarykite php-fpm Konfigūracijos failai:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Pakeiskite į savo PHP versiją, pvz., PHP8.3, ir pakeiskite ją į šią:/etc/php/8.3/fpm/pool.d/www.conf

Užklausti HestiaCP nustatytą PHP versiją

v-list-web-domain user domain.com

E.g .:

v-list-web-domain abc chenweiliang.com

Išvestyje pamatysite kažką panašaus į:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Tai reiškia, kad svetainė naudoja PHP 8.3.

Pažvelkime į jūsų PHP-FPM konfigūraciją:

[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

Jūs galite pamatyti, kad jūsų pm Naudojamas yra ondemand,Nors tai gali sumažinti išteklių naudojimą neveikos metu, staiga padidėjus srautui, procesas gali nesugebėti reaguoti laiku., todėl atsiranda 500 klaida.

www.conf: Sistemoje integruotas „universalus išteklių telkinys“

Įdiegus PHP-FPM, sistema automatiškai pateiks jums... www.conf dokumentas.
它的Padėties nustatymasTai labai paprasta – tai tiesiog numatytasis procesų telkinys, kuris veikia iš karto, paprastai prijungtas prie... www-data Vartotojo atsisiuntimas.

Šis telkinio tipas ypač tinka vienos vietos aplinkai: konfigūracija yra lengva, o visi parametrai yra bendriniai šablonai, tokie kaip:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5

Jei talpinate tik vieną svetainę, galite ja naudotis tiesiogiai ir patikimai be jokių papildomų rūpesčių.

etUfo.org.conf: Pasirinktinis telkinys

Kai valdote kelias svetaines, negalite visų sutalpinti į tą patį telkinį.
Šiuo metu „HestiaCP“ automatiškai sukurs atskirą telkinį kiekvienai svetainei, pavyzdžiui... etUfo.org.confSpecializuojamės domenų vardų srityje etufo.org paslaugą.

Įprastas žaidimo būdas yra toks:

  • Keisti naudotojus ir grupes:user = etufo,group = etufo
  • Nepriklausoma stebėsena:listen = /run/php/etufo.sock
  • Procesų skaičiaus reguliavimas užtikrina tvirtą stabilumą net ir esant dideliam lygiagretumui.
  • Atskiri žurnalų failai palengvina trikčių šalinimą.

Privalumai akivaizdūs:Saugi izoliacijaNet jei viena svetainė bus pažeista, kitos svetainės liks nepaveiktos.

dummy.conf: fiktyvus failas

manekenas.conf Paprastai tai yra sistemos pateikti pavyzdžiai arba šablonai.
Jis iš tikrųjų neveiks, nebent jį rankiniu būdu modifikuosite ir įjungsite.
Jo reikšmė labiau panaši į „naudojimo vadovą“, kuriame nurodoma, kaip parašyti naują baseino konfigūraciją.

Kodėl reikia padalinti baseiną?

  • 安全 性Skirtingoms svetainėms naudokite skirtingus naudotojus, kad išvengtumėte leidimų konfliktų.
  • 性能优化Procesų skaičių galima reguliuoti individualiai kiekvienam telkiniui, todėl galima lanksčiai koreguoti pagal srauto poreikį.
  • IsolationŽurnalai, klaidos ir klausymo adresai yra atskirti, todėl trikčių šalinimas tampa lengvesnis.

Pavyzdžiui: net jei www.conf Jis sugriuvo.etufo.org.conf Jis vis tiek veiks normaliai ir nesugadins viso serverio.

实际场景

  • Vienos vietos serverisUžtenka www.conf.
  • Kelių vietų serverisKiekviena svetainė turi savo nepriklausomą .conf failą, pvz., etufo.org.conf.
  • manekenas.confTik informaciniams tikslams, nerekomenduojama.

Konfigūracijos palyginimas

www.conf (numatytasis telkinys)

[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5

etufo.org.conf (pasirinktinis telkinys)

[etufo.org]
user = etufo
group = etufo
listen = /run/php/etufo.sock
pm = dynamic
pm.max_children = 20
access.log = /var/log/php-fpm/etufo.access.log

Pagrindinis skirtumas yra:Vartotojo tapatybė, klausymo adresas, procesų skaičius.

1. Sureguliuokite PHP-FPM procesų telkinio parametrus

Jei konfigūracija naudoja dynamicTai metodas, leidžiantis iš anksto paleisti kai kuriuos darbo procesus ir dinamiškai juos koreguoti pagal užklausų kiekį, kad būtų galima greičiau reaguoti, kai užklausų kiekis staiga padidėja.

Svetainėms, turinčioms tam tikrą srautą, rekomenduojama naudoti pm = dynamicNes jis gali palaikyti tam tikrą kiekį neveikos procesų ir išvengti 500 klaidų esant dideliam lygiagretumui.

Rekomenduojama jį naudoti tik tada, kai prieigos apimtis yra itin maža, o atminties ištekliai – riboti. pm = ondemand Taupant išteklius.

Siūloma dynamicir optimizuoti pm.max_children Ir kiti parametrai:

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

Kodėl norite tai pakeisti taip?

  • pm = dynamic: lanksčiau paskirstykite procesus, kad išvengtumėte užklausos laukimo, kurį gali sukelti pareikalavimas;
  • pm.max_children = 16: Užkirsti kelią 500 klaidų, kurias sukelia per mažai procesų;
  • pm.start_servers = 5: Venkite lėto proceso paleidimo;
  • pm.max_requests = 3000:Atminties nutekėjimo prevencija, reguliariai perdirbkite procesą.

2. Apribokite PHP scenarijų vykdymo laiką, kad išvengtumėte ilgalaikio užimtumo

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

Tai gali užkirsti kelią kai kuriemsPHP scenarijai, naudojantys per daug procesoriaus, gali sugadinti jūsų serverį.

Išsaugoję iš naujo paleiskite PHP procesą:

sudo systemctl restart php8.3-fpm

Įgalinkite PHP-FPM būsenos stebėjimą, kad galėtumėte bet kada stebėti eigą

Įgalinti PHP-FPM proceso stebėjimą ir bet kada peržiūrėtiDabartinis aktyvių procesų skaičius ir užklausos laukimo būsena, kad būtų išvengta serverio perkrovos.

php-fpm.conf Pridėta:

pm.status_path = /status

Tada „Nginx“ konfigūracija:

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

Tokiu būdu galite http://yourdomain.com/status Pažiūrėkite, kaip veikia PHP-FPM!

Optimizuokite PHP-FPM žurnalus, kad greitai pašalintumėte triktis

php-fpm.conf Pridėti prie:

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

Tokiu būdu, kai įvyksta 500 klaida, galite tiesiogiai peržiūrėti žurnalą:

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

Pažiūrėkite, ar PHP praneša apie klaidą, pvz out of memory,script execution timeout Laukti.

Reguliariai iš naujo paleiskite PHP-FPM, kad išvengtumėte atminties nutekėjimo

galintis praeiti cron Reguliariai iš naujo paleiskite PHP-FPM, kad išvengtumėte ilgalaikių procesųAtminties nutekėjimai.

crontab -e

Pridėkite šią suplanuotą užduotį, kad PHP-FPM automatiškai paleistumėte iš naujo 3 val. kiekvieną dieną:

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

Ką daryti, jei problema išlieka? Tolesnis optimizavimas!

Jei vis tiek laikotės aukščiau pateikto optimizavimoKartais įvyksta 500 klaidų, galite tęsti šiuos optimizavimus:

1. Įjunkite OPcache, kad pagerintumėte PHP vykdymo efektyvumą

Jei OPcache dar neįjungta, galite ją įdiegti taip (pavyzdžiui naudodami Ubuntu):

sudo apt install php8.3-opcache -y

Tada redaguoti php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • Išjungti aptikimą realiuoju laikuSumažinkite failų sistemos įvesties/išvesties kiekį ir pagerinkite našumą.
  • Tačiau tai reiškia, kad modifikavę PHP failus turite rankiniu būdu išvalyti talpyklą (perkrauti PHP paslaugą).

Pakeitus konfigūraciją, norint, kad pakeitimai įsigaliotų, reikia paleisti PHP paslaugą iš naujo.

sudo systemctl restart php<版本>-fpm

Efektas? PHP puslapio vykdymo greitis labai pagerėjo!

2. Nginx konfigūracijos optimizavimas

Įsitikinkite, kad su Nginx susiję parametrai yra pagrįsti, pvz fastcgi_read_timeout Tinkamai sureguliuokite, kad „Nginx“ nenutrauktų PHP scenarijų dėl ilgo vykdymo laiko:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Santrauka: Optimizuokite PHP-FPM ir svetainė nebestrigs!

Kokius pakeitimus atlikome po šio optimizavimo?

✅ PHP-FPM procesų telkinio optimizavimas, naudokite ondemandIr optimizuoti pm.max_children parametras;
PHP scenarijų vykdymo laiko ribojimas, siekiant išvengti ilgalaikio procesoriaus užimtumo;
Įjungti PHP-FPM stebėjimą, peržiūrėti proceso apkrovą realiu laiku;
PHP-FPM žurnalų optimizavimas, greitai pašalinkite 500 klaidų;
Reguliariai iš naujo paleiskite PHP-FPM, užkirsti kelią atminties nutekėjimui;
Įgalinti OPcache, pagerinti PHP vykdymo efektyvumą;
„Nginx“ konfigūracijos optimizavimas, kad išvengtumėte laiko pabaigos problemų.

Po šio optimizavimo PHP-FPM apkrova labai sumažės ir svetainės veikimas taps stabilesnis! 🔥

Išbandykite tai dabar! 💪🚀

发表 评论

Jūsų el. pašto adresas nebus skelbiamas. Naudojami privalomi laukai * Etiketė

Straipsnių katalogas
Pereikite į viršų