Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 11218|Odpoveď: 4

Konfigurácia a ladenie parametrov PHP-FPM

[Kopírovať odkaz]
Zverejnené 26. 7. 2017 9:20:54 | | |
php-fpm.conf Dôležité parametre sú podrobne vysvetlené

Pid = run/php-fpm.pid
#pid设置 sa odporúča predvolene povoliť var/run/php-fpm.pid v inštalačnom adresári

error_log = log/php-fpm.log
#错误日志 je predvolená varianta var/log/php-fpm.log v inštalačnom adresári

log_level = oznámenie
#错误级别. Dostupné úrovne sú: upozornenie, chyba, varovanie, upozornenie, ladenie. Predvolené: oznámenie.

emergency_restart_threshold = 60
emergency_restart_interval = 60. roky
# znamená, že ak počet php-cgi procesov s chybami SIGSEGV alebo SIGBUS prekročí emergency_restart_threshold v rámci hodnoty emergency_restart_interval, php-fpm sa elegantne reštartuje. Tieto dve možnosti zvyčajne zostávajú predvolené.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Dostupné jednotky: s (sekundy), m (minúty), h (hodiny) alebo d (dni) Predvolené jednotky: s (sekundy). Predvolené: 0.

Daemonize = áno
#后台执行fpm predvolená hodnota je áno, a ak chcete ladiť, môžete ju zmeniť na nie. V FPM je možné použiť rôzne nastavenia na prevádzku viacerých procesných poolov. Tieto nastavenia je možné nastaviť samostatne pre každý procesný pool.

listen = 127.0.0.1:9000
#fpm监听端口, teda adresa spracovaná PHP v nginx, je zvyčajne predvolená hodnota. Dostupné formáty sú: 'ip:port', 'port', '/path/to/unix/socket'. Každý procesný pool je potrebné nastaviť.

listen.backlog = -1
#backlog数, -1 znamená neobmedzené, určené operačným systémom, stačí napísať tento riadok. Referencia: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP, nastavte žiadne tak, aby neobmedzovali IP, ak chcete nastaviť nginx iných hostiteľov na prístup k tomuto FPM procesu, musíte nastaviť IP adresu, ku ktorej sa dá pristupovať za cenu počúvania. Predvolená hodnota je ľubovoľná. Každá adresa je oddelená čiarkou. Ak nie je nastavená alebo je prázdna, ktorýkoľvek server môže požiadať o spojenie

listen.owner = www
listen.group = www
listen.mode = 0666
#unix možnosť nastavenia socketu, ak používate TCP na prístup, môžete komentovať tu.

používateľ = www
skupina = www
#启动进程的帐户和组

pm = dynamický #对于专用服务器, pm môže byť nastavený na statické.
#如何控制子进程 sú možnosti statické a dynamické. Ak je vybraný statický, pevný počet podprocesov je špecifikovaný pomocou pm.max_children. Ak je zvolená dynamická, určuje sa podľa nasledujúcich parametrov:
pm.max_deti #, maximálny počet podprocesov
pm.start_servers #, počet procesov pri štarte
pm.min_spare_servers #, garantujte minimálny počet nečinných procesov a vytvorte nový podproces, ak je nečinný proces menší ako táto hodnota
pm.max_spare_servers#, zabezpečte maximálny počet nečinných procesov, ak je nečinný proces väčší ako táto hodnota, tento proces sa vyčistí

pm.max_požiadaviek = 1000
#设置每个子进程重生之前服务的请求数. To je veľmi užitočné pre moduly tretích strán, ktoré môžu mať úniky pamäte. Ak je nastavená na '0', požiadavka je vždy prijatá. Ekvivalent PHP_FCGI_MAX_REQUESTS environmentálnych premenných. Predvolené: 0.

pm.status_path = /stav
#FPM状态页面的网址. Ak nemáš nastavenia, nemôžeš sa dostať na stránku so stavom. Predvolené: žiadne. Bude sa používať monitorovanie munin

ping.path = /ping
#FPM监控页面的ping网址. Ak nemáš nastavenia, nemôžeš sa dostať na stránku s pingom. Táto stránka slúži na externé detegovanie, či je FPM aktívny a dokáže reagovať na požiadavky. Všimnite si, že musí začínať lomkou (/).

ping.response = pong
#用于定义ping请求的返回相应. Vracia text v textovom/obyčajnom formáte pre HTTP 200. Predvolené: pong.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Táto možnosť môže byť užitočná pre skripty, ktoré nie sú zrušené z nejakého špeciálneho dôvodu php.ini 'max_execution_time' v nastaveniach. Ak nastavíte '0', znamená 'Vypnuté'. Môžete skúsiť túto možnosť zmeniť, keď sa často vyskytujú chyby 502.

request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后 sa zodpovedajúce informácie z PHP volacieho zásobníka zapíšu do pomalého logu. Nastavený na '0' znamená 'Vypnuté'

slowlog = log/$pool.log.slow
#慢请求的记录日志, používajte s request_slowlog_timeout

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Predvolená hodnota: Predvolená otvorená rukoväť je 1024, ktorú je možné zobraziť pomocou ulimit -n a upraviť pomocou ulimit -n 2048.

rlimit_core = 0
#设置核心rlimit最大限制值. Dostupné hodnoty: 'neobmedzené', 0 alebo kladné celé čísla. Predvolená hodnota: Systémovo definovaná hodnota.

chroot =
#启动时的Chroot目录. Definovaný adresár musí byť absolútna cesta. Ak nie je nastavené, chroot sa nepoužíva.

chdir =
#设置启动目录 sa Chdir automaticky odosiela do tohto adresára pri jeho spustení. Definovaný adresár musí byť absolútna cesta. Predvolené: aktuálny adresár, alebo/adresár (pri chrootovaní)

catch_workers_output = áno
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Ak nie sú nastavené, stdout a stderr budú podľa pravidiel FastCGI presmerované na /dev/null. Predvolené: Null.



Ladenie parametrov PHP-FPM

pm = dynamický; Označuje, ktorá metóda riadenia výrobného množstva sa používa

Dynamický znamená, že počet PHP-FPM procesov je dynamický, počet je pm.start_servers zadaný na začiatku, ak je viac požiadaviek, automaticky sa zvýši, aby počet nečinných procesov nebol menší ako pm.min_spare_servers, a ak je počet procesov veľký, bude tiež primerane upravený, aby počet nadbytočných procesov nepresiahol pm.max_spare_servers

Statický znamená, že počet procesov v php-fpm je statický a počet procesov je vždy číslo určené pm.max_children a nezvyšuje sa ani neznižuje

pm.max_detí = 300; Počet php-fpm procesov, ktoré sú povolené v statickom režime
pm.start_servers = 20; Počet začínajúcich php-fpm procesov v dynamickom režime
pm.min_spare_servers = 5; Minimálny počet php-fpm procesov v dynamickom režime
pm.max_spare_servers = 35; Maximálny počet php-fpm procesov v dynamickom režime

Ak je pm statický, potom je platný iba parameter pm.max_children. Systém otvorí stanovený počet php-fpm procesov

Ak je PM dynamický, parameter pm.max_children je neplatný a posledné tri parametre nadobúdajú účinok. Systém začne pm.start_servers php-fpm procesmi na začiatku PHP-FMM behu a potom dynamicky upravuje počet php-fpm procesov medzi pm.min_spare_servers a pm.max_spare_servers podľa potrieb systému

Takže, ktorú metódu PM je lepšie zvoliť pre náš server? V skutočnosti, podobne ako Apache, spúšťanie PHP programov má viac-menej problémy s únikom pamäte po spustení. Preto proces php-fpm zaberá na začiatku len asi 3M pamäte a po nejakom čase bežania sa jej kapacita zvýši na 20-30M.

Pre servery s veľkou pamäťou (napríklad 8G alebo viac) je vlastne vhodnejšie špecifikovať statickú max_children, pretože to nevyžaduje dodatočnú kontrolu procesu a zvyšuje efektivitu. Keďže časté prepínanie php-fpm procesov tiež spôsobuje oneskorenie, je lepšie zapnúť statické efekty, keď je pamäť dostatočne veľká. Množstvo je možné získať aj podľa pamäte/30M, napríklad 8GB pamäte je možné nastaviť na 100, potom pamäť spotrebovanú php-fpm je možné ovládať v 2G-3G. Ak je pamäť o niečo menšia, napríklad 1G, potom je špecifikácia počtu statických procesov priaznivejšia pre stabilitu servera. To zabezpečuje, že php-fpm dostane len dostatok pamäte a pridelí malé množstvo pamäte iným aplikáciám, čo umožní plynulejší chod systému.

Pre server s malou pamäťou, ako je VPS s 256M pamäte, aj keď sa počíta podľa množstva pamäte 20M, 10 php-cgi procesov spotrebuje 200M pamäte, potom by mal byť pád systému normálny. Preto by ste sa mali snažiť kontrolovať počet php-fpm procesov a po hrubom objasnení pamäte obsadenej inými aplikáciami špecifikovať statický malý počet, ktorý systém urobí stabilnejším. Alebo použiť dynamickú metódu, pretože dynamická metóda ukončí redundantný proces a získa späť časť pamäte, preto sa odporúča používať ju na serveroch alebo VPS s menším množstvom pamäte. Konkrétne maximálne množstvo sa získava na základe pamäte/20M. Napríklad pre 512M VPS sa odporúča nastaviť pm.max_spare_servers na 20. Čo sa týka pm.min_spare_servers, odporúča sa nastaviť ho podľa zaťaženia servera a vhodnejšia hodnota je medzi 5~10.

200 na serveri s 4G pamäťou je v poriadku (môj 1G testovací stroj, 64 je najlepšie, odporúča sa použiť záťažový test pre dosiahnutie najlepšej hodnoty)

pm.max_požiadaviek = 10240;

Najväčším problémom v nginx php-fpm konfiguračnom procese je vnútorný únik: záťaž na serveri nie je veľká, ale obsadenosť pamäte rýchlo rastie, rýchlo ju pohlcuje a potom začne pohlcovať swap partíciu, pričom systém rýchlo zasekne! Podľa oficiálneho úvodu php-cgi nemá únik pamäte a php-cgi si po splnení každého požiadavku pamäť obnoví, ale nebude uvoľnená do operačného systému, čo spôsobí, že veľké množstvo pamäte bude obsadené php-cgi.


Oficiálnym riešením je znížiť hodnotu PHP_FCGI_MAX_REQUESTS, ak sa použije php-fpm, zodpovedajúci php-fpm.conf je max_requests, čo znamená, koľko požiadaviek bude odoslaných na reštart vlákna, musíme túto hodnotu primerane znížiť, aby php-fpm automaticky uvoľnil pamäť, nie väčšinu z 51200 na internete a podobne, v skutočnosti je s tým spojená aj iná hodnota max_ deti, takto sa vytvorí počet procesov pri každom php-fpm, takže skutočná spotreba pamäte je max_children*max_requests* Každý požiadavok využíva pamäť, podľa toho môžeme odhadnúť spotrebu pamäte, takže nie je potrebné písať skripty na zabitie.

request_terminate_timeout = 30;

Maximálny čas vykonávania, konfigurovateľný v php.ini (max_execution_time)

request_slowlog_timeout = 2; Zapnite pomalé kmene
slowlog = log/$pool.log.slow; Pomalá cesta logaritu

rlimit_files = 1024; Pridané obmedzenie na php-fpm na otváranie deskriptorov súborov





Predchádzajúci:Alibaba Cloud SLB load balancing analýza zlyhania HTTP health check
Budúci:Dz X3.4 Overenie súborov – chýbajúce súbory
 Prenajímateľ| Zverejnené 28. 11. 2021 13:42:00 |
[Cvičenie] Skontrolujte stav php-fpm cez Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Prenajímateľ| Zverejnené 19. 12. 2021 10:48:43 |
 Prenajímateľ| Zverejnené 16. 1. 2022 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_spare_servers
;             pm.max_spare_servers - maximálny počet detí v režime 'idle'
; Predvolená hodnota: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_spare_servers = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep min_spare_servers
;             pm.min_spare_servers - minimálny počet detí v "nečinnosti"
; Predvolená hodnota: 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 – počet detí vytvorených na startupe.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_requests
pm.max_requests = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep request_slowlog_timeout
; Poznámka: slowlog je povinný, ak je nastavený request_slowlog_timeout
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep Slowlog
; - 'slowlog'
; Poznámka: slowlog je povinný, ak je nastavený request_slowlog_timeout
slowlog = /alidata/log/php/$pool.log.slow
; Uložené do súboru 'slowlog'. Hodnota '0' znamená 'vypnuté'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Nastavte open file descriptor rlimit pre master proces.
; rlimit_files = 1024
; Nastavte maximálny limit veľkosti jadra pre hlavný proces.
; rlimit_core = 0
; Nastavte open file descriptor rlimit.
; rlimit_files = 1024
; Nastavte maximálny limit veľkosti jadra.
; rlimit_core = 0
[root@old_server conf] #
 Prenajímateľ| Zverejnené 16. 1. 2022 16:54:04 |
request_terminate_timeout = 10s

Predvolená hodnota je 0 sekúnd, čo znamená, že PHP skript bude pokračovať vo vykonávaní. Týmto spôsobom, keď sú všetky php-cgi procesy zaneprázdnené, Nginx+PHP WebServer už nedokáže spracovať nové PHP požiadavky a Nginx vráti používateľovi "502 Bad Gateway". request_terminate_timeout = 30-ky sa môžu použiť
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com