Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 11218|Atsakyti: 4

PHP-FPM parametrų konfigūracija ir derinimas

[Kopijuoti nuorodą]
Paskelbta 2017-07-26 09:20:54 | | |
php-fpm.conf Išsamiai paaiškinti svarbūs parametrai

pid = paleisti / php-fpm.pid
#pid设置, pagal numatytuosius nustatymus diegimo kataloge rekomenduojama įjungti var/run/php-fpm.pid

error_log = log/php-fpm.log
#错误日志, numatytasis yra var/log/php-fpm.log diegimo kataloge

log_level = pranešimas
#错误级别. Galimi lygiai: įspėjimas, klaida, įspėjimas, pranešimas, derinimas. Numatytasis: pranešimas.

emergency_restart_threshold = 60
emergency_restart_interval = 60s
# rodo, kad jei php-cgi procesų skaičius su SIGSEGV arba SIGBUS klaidomis viršija emergency_restart_threshold emergency_restart_interval reikšmėje, php-fpm bus grakščiai paleistas iš naujo. Šios dvi parinktys paprastai išlieka numatytosios.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Galimi vienetai: s (sekundės), m (minutės), h (valandos) arba d (dienos) Numatytieji vienetai: s (sekundės). Numatytasis: 0.

daemonize = taip
#后台执行fpm numatytoji reikšmė yra taip, o jei norite derinti, galite ją pakeisti į ne. FPM galima naudoti skirtingus nustatymus keliems procesų telkiniams paleisti. Šiuos parametrus galima nustatyti atskirai kiekvienam procesų telkiniui.

klausytis = 127.0.0.1:9000
#fpm监听端口, tai yra, adresas, kurį PHP apdoroja nginx, paprastai yra numatytoji reikšmė. Galimi formatai: 'ip:port', 'port', '/path/to/unix/socket'. Kiekvienas procesų telkinys turi būti nustatytas.

listen.backlog = -1
#backlog数, -1 reiškia neribotą, nustatytą operacinės sistemos, tiesiog pakomentuokite šią eilutę. Kodas: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP nustatykite, kad neapribotų IP, jei norite nustatyti kitų kompiuterių nginx, kad pasiektumėte šį FPM procesą, turite nustatyti IP adresą, kurį galima pasiekti klausymosi kaina. Numatytoji reikšmė yra bet kokia. Kiekvienas adresas atskirtas kableliu. Jei jis nenustatytas arba tuščias, bet kuriam serveriui leidžiama prašyti ryšio

listen.owner = www
listen.group = www
klausytis.režimas = 0666
#unix lizdo nustatymo parinktį, jei naudojate TCP, galite komentuoti čia.

vartotojas = www
grupė = www
#启动进程的帐户和组

pm = dinaminis #对于专用服务器, pm galima nustatyti statinį.
#如何控制子进程 parinktys yra statiškos ir dinamiškos. Jei pasirinktas statinis, pm.max_children nurodomas fiksuotas antrinių procesų skaičius. Jei pasirenkamas dinaminis, jis nustatomas pagal šiuos parametrus:
pm.max_children #, maksimalus antrinių procesų skaičius
pm.start_servers #, procesų skaičius paleidžiant
pm.min_spare_servers #, garantuokite minimalų laukimo procesų skaičių ir sukurkite naują antrinį procesą, jei laukimo procesas yra mažesnis už šią reikšmę
pm.max_spare_servers#, užtikrinkite maksimalų laukimo procesų skaičių, jei laukimo procesas yra didesnis už šią reikšmę, jis bus išvalytas

pm.max_užklausos = 1000
#设置每个子进程重生之前服务的请求数. Tai labai naudinga trečiųjų šalių moduliams, kuriuose gali būti atminties nutekėjimo. Jei nustatyta "0", užklausa visada priimama. Atitinka PHP_FCGI_MAX_REQUESTS aplinkos kintamuosius. Numatytasis: 0.

pm.status_path = /status
#FPM状态页面的网址. Jei neturite nustatymų, negalite pasiekti būsenos puslapio. Numatytasis: nėra. Bus naudojamas Munin stebėjimas

ping.path = /ping
#FPM监控页面的ping网址. Jei neturite nustatymų, negalite pasiekti ping puslapio. Šis puslapis naudojamas išoriškai nustatyti, ar FPM yra gyvas ir gali atsakyti į užklausas. Atkreipkite dėmesį, kad jis turi prasidėti pasviruoju brūkšniu (/).

ping.response = tenisas
#用于定义ping请求的返回相应. Pateikia tekstą teksto / paprastuoju formatu, skirtu HTTP 200. Numatytasis: tenisas.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Ši parinktis gali būti naudinga scenarijams, kurie nėra nutraukti dėl kokios nors ypatingos priežasties php.ini nustatymuose "max_execution_time". Nustatyta į "0" reiškia "Išjungta". Galite pabandyti pakeisti šią parinktį, kai dažnai susiduriama su 502 klaidomis.

request_slowlog_timeout = 10 s
#当一个请求该设置的超时时间后, atitinkama PHP skambučių rietuvės informacija bus įrašyta į lėtą žurnalą. Nustatyta į "0" reiškia "Išjungta"

slowlog = log/$pool.log.slow
#慢请求的记录日志, naudokite su request_slowlog_timeout

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Numatytoji reikšmė: numatytoji atidarymo rankenėlė yra 1024, kurią galima peržiūrėti naudojant ulimit -n ir modifikuoti ulimit -n 2048.

rlimit_core = 0
#设置核心rlimit最大限制值. Galimos reikšmės: "neribotas", 0 arba teigiami sveikieji skaičiai. Numatytoji reikšmė: sistemos apibrėžta reikšmė.

chroot =
#启动时的Chroot目录. Apibrėžtas katalogas turi būti absoliutus kelias. Jei nustatymo nėra, chroot nenaudojamas.

chdir =
#设置启动目录, Chdir automatiškai siunčiamas į tą katalogą, kai jis paleidžiamas. Apibrėžtas katalogas turi būti absoliutus kelias. Numatytasis: dabartinis katalogas, arba/katalogas (kai chrooted)

catch_workers_output = taip
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Jei nenustatyta, stdout ir stderr bus nukreipti į /dev/null pagal FastCGI taisykles. Numatytasis: nulinis.



PHP-FPM parametrų derinimas

pm = dinaminis; Nurodo, kuris proceso kiekio valdymo metodas naudojamas

Dinaminis reiškia, kad PHP-FPM procesų skaičius yra dinamiškas, skaičius pm.start_servers nurodytas pradžioje, jei yra daugiau užklausų, jis automatiškai padidės, kad nenaudojamų procesų skaičius būtų ne mažesnis nei pm.min_spare_servers, o jei procesų skaičius yra didelis, jis taip pat bus atitinkamai išvalytas, siekiant užtikrinti, kad perteklinių procesų skaičius būtų ne didesnis kaip pm.max_spare_servers

statinis reiškia, kad procesų skaičius php-fpm yra statinis, o procesų skaičius visada yra pm.max_children nurodytas skaičius, ir nedidėja ar mažėja

pm.max_vaikai = 300; PHP-FPM procesų, kurie įjungti statiniu režimu, skaičius
pm.start_servers = 20; Pradedančių php-fpm procesų skaičius dinaminiu režimu
pm.min_spare_servers = 5; Mažiausias php-fpm procesų skaičius dinaminiu režimu
pm.max_atsarginiai_serveriai = 35; Maksimalus php-fpm procesų skaičius dinaminiu režimu

Jei pm yra statinis, galioja tik parametras pm.max_children. Sistema atidarys nustatytą skaičių php-fpm procesų

Jei PM yra dinaminis, parametras pm.max_children yra neleistinas ir įsigalioja paskutiniai trys parametrai. Sistema pradės pm.start_servers php-fpm procesus php-fpm paleidimo pradžioje, o tada dinamiškai koreguos php-fpm procesų skaičių tarp pm.min_spare_servers ir pm.max_spare_servers pagal sistemos poreikius

Taigi, kurį PM metodą geriau pasirinkti mūsų serveriui? Tiesą sakant, kaip ir "Apache", paleidus PHP programas po vykdymo daugiau ar mažiau kils atminties nutekėjimo problemų. Štai kodėl php-fpm procesas pradžioje užima tik apie 3M atminties, o kurį laiką paleidus jis pakils iki 20-30M.

Serveriams, turintiems didelę atmintį (pvz., 8G ar daugiau), iš tikrųjų tikslingiau nurodyti statinį max_children, nes tam nereikia papildomo proceso valdymo ir padidėja efektyvumas. Kadangi dažnas php-fpm procesų perjungimas taip pat vėluos laiką, geriau bus įjungti statinius efektus, kai atmintis yra pakankamai didelė. Kiekį taip pat galima gauti pagal atmintį/30M, pavyzdžiui, 8GB atmintį galima nustatyti į 100, tada php-fpm sunaudojamą atmintį galima valdyti 2G-3G. Jei atmintis yra šiek tiek mažesnė, pvz., 1G, tada statinių procesų skaičiaus nurodymas yra palankesnis serverio stabilumui. Tai užtikrina, kad php-fpm gauna tik pakankamai atminties, ir skiria nedidelį kiekį atminties kitoms programoms, todėl sistema veikia sklandžiau.

Serveriui su maža atmintimi, pavyzdžiui, VPS su 256M atmintimi, net jei jis apskaičiuojamas pagal 20M atminties kiekį, 10 php-cgi procesų sunaudos 200M atminties, tada sistemos gedimas turėtų būti normalus. Todėl turėtumėte pabandyti kontroliuoti php-fpm procesų skaičių ir, apytiksliai išsiaiškinę kitų programų užimamą atmintį, nurodykite statinį mažą skaičių, kuris padarys sistemą stabilesnę. Arba naudokite dinaminį metodą, nes dinaminis metodas užbaigs perteklinį procesą ir atgaus dalį atminties, todėl rekomenduojama jį naudoti serveriuose arba VPS su mažiau atminties. Konkretus maksimalus kiekis gaunamas pagal atmintį / 20M. Pavyzdžiui, 512M VPS rekomenduojama nustatyti pm.max_spare_servers į 20. Kalbant apie pm.min_spare_servers, rekomenduojama jį nustatyti pagal serverio apkrovą, o tinkamesnė vertė yra tarp 5~10.

200 serveryje su 4G atmintimi yra gerai (mano 1G testavimo mašina, 64 yra geriausia, norint gauti geriausią vertę, rekomenduojama naudoti testavimą nepalankiausiomis sąlygomis)

pm.max_užklausos = 10240;

Didžiausia problema nginx php-fpm konfigūracijos procese yra vidinė nuotėkio problema: serverio apkrova nėra didelė, tačiau atminties užimtumas greitai didėja, greitai suvalgo atmintį ir tada pradeda valgyti apsikeitimo skaidinį, o sistema greitai užstringa! Tiesą sakant, pagal oficialų įvadą, php-cgi neturi atminties nutekėjimo, o php-cgi atgaus atmintį po kiekvienos užklausos įvykdymo, tačiau nebus išleistas į operacinę sistemą, todėl php-cgi užims daug atminties.


Oficialus sprendimas yra sumažinti PHP_FCGI_MAX_REQUESTS vertę, jei naudojamas php-fpm, atitinkamas php-fpm.conf yra max_requests, o tai reiškia, kiek užklausų bus išsiųsta iš naujo paleisti giją, turime atitinkamai sumažinti šią vertę, kad php-fpm automatiškai atlaisvintų atmintį, o ne dauguma 51200 internete ir pan., Tiesą sakant, yra kita su ja susijusi vertė max_ vaikai, štai kiek procesų bus nustatyta kiekvieną kartą php-fpm, kad faktinis atminties suvartojimas būtų max_children*max_requests* Kiekviena užklausa naudoja atmintį, pagal tai galime įvertinti atminties naudojimą, todėl nereikia rašyti scenarijų, kad nužudytumėte.

request_terminate_timeout = 30;

Maksimalus vykdymo laikas, konfigūruojamas php.ini (max_execution_time)

request_slowlog_timeout = 2; Lėtų žurnalų įjungimas
slowlog = log/$pool.log.slow; Lėtas žurnalo kelias

rlimit_files = 1024; Pridėtas php-fpm apribojimas atidaryti failų deskriptorius





Ankstesnis:"Alibaba Cloud SLB" apkrovos balansavimo HTTP būklės patikrinimo gedimų analizė
Kitą:DZ x3.4 failo tikrinimas trūksta failų
 Savininkas| Paskelbta 2021-11-28 13:42:00 |
[Praktika] Patikrinkite php-fpm būsenos informaciją per Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Savininkas| Paskelbta 2021-12-19 10:48:43 |
 Savininkas| Paskelbta 2022-01-16 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep max_spare_servers
;             pm.max_spare_servers - maksimalus vaikų skaičius neveikiančioje būsenoje
; Numatytoji reikšmė: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_atsarginiai_serveriai = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep min_spare_servers
;             pm.min_spare_servers – mažiausias prastovoje esančių vaikų skaičius
; Numatytoji reikšmė: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 5
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep start_servers
;             pm.start_servers - paleidžiant sukurtų vaikų skaičius.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep max_requests
pm.max_užklausos = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep request_slowlog_timeout
; Pastaba: slowlog yra privalomas, jei request_slowlog_timeout nustatytas
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep slowlog
; - "Slowlog"
; Pastaba: slowlog yra privalomas, jei request_slowlog_timeout nustatytas
slowlog = /alidata/log/php/$pool.log.slow
; išmesti į "slowlog" failą. Reikšmė "0s" reiškia "išjungta".
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Nustatyti pagrindinio proceso atidaryto failo aprašo rlimitą.
; rlimit_files = 1024
; Nustatykite maksimalaus šerdies dydžio rlimit pagrindiniam procesui.
; rlimit_core = 0
; Nustatyti atidaryto failo aprašo rlimitą.
; rlimit_files = 1024
; Nustatykite maksimalų šerdies dydį rlimit.
; rlimit_core = 0
[root@old_server conf] #
 Savininkas| Paskelbta 2022-01-16 16:54:04 |
request_terminate_timeout = 10 s

Numatytoji reikšmė yra 0 sekundžių, o tai reiškia, kad PHP scenarijus bus vykdomas toliau. Tokiu būdu, kai visi php-cgi procesai yra užimti, Nginx+PHP žiniatinklio serveris nebegali apdoroti naujų PHP užklausų, o Nginx vartotojui grąžins "502 Bad Gateway". Galima naudoti request_terminate_timeout = 30s
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com