Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 11218|Odgovoriti: 4

Konfiguracija in nastavitev parametrov PHP-FPM

[Kopiraj povezavo]
Objavljeno na 26. 07. 2017 09:20:54 | | |
php-fpm.conf Pomembni parametri so podrobno pojasnjeni

Pid = Run/php-FPM.PID
#pid设置 je priporočljivo, da v namestitveni mapi privzeto omogočite var/run/php-fpm.pid

error_log = log/php-fpm.log
#错误日志 je privzeto var/log/php-fpm.log v namestitveni mapi

log_level = obvestilo
#错误级别. Razpoložljive ravni so: opozorilo, napaka, opozorilo, obvestilo, odpravljanje napak. Privzeto: obvestilo.

emergency_restart_threshold = 60
emergency_restart_interval = 60. leta
# pomeni, da če število php-cgi procesov z napakami SIGSEGV ali SIGBUS preseže emergency_restart_threshold znotraj vrednosti emergency_restart_interval, se php-fpm elegantno ponovno zažene. Ti dve možnosti običajno ostajata privzeti.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Razpoložljive enote: s (sekunde), m (minute), h (ure) ali d (dnevi) Privzete enote: s (sekunde). Privzeto: 0.

daemonize = da
#后台执行fpm je privzeta vrednost da, in če želite razhroščevati, jo lahko spremenite na ne. V FPM je mogoče uporabiti različne nastavitve za izvajanje več procesnih bazenov. Te nastavitve je mogoče nastaviti posebej za vsak procesni bazen.

listen = 127.0.0.1:9000
#fpm监听端口, torej naslov, ki ga PHP obdela v nginx, je običajno privzeta vrednost. Na voljo so formati: 'ip:port', 'port', '/path/to/unix/socket'. Vsak procesni bazen je treba nastaviti.

listen.backlog = -1
#backlog数, -1 pomeni neomejeno, odvisno od operacijskega sistema, samo komentirajte to vrstico. Vir: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP, nastavite any, da ne omejuje IP-ja, če želite nastaviti nginx drugih gostiteljev za dostop do tega FPM procesa, morate nastaviti IP naslov, do katerega je mogoče dostopati, vendar na račun poslušanja. Privzeta vrednost je katerakoli. Vsak naslov je ločen z vejico. Če ni nastavljena ali je prazna, lahko kateri koli strežnik zahteva povezavo

listen.owner = www
listen.group = www
listen.mode = 0666
#unix možnosti nastavitve socketa, če uporabljate TCP za dostop, lahko komentirate tukaj.

uporabnik = www
skupina = www
#启动进程的帐户和组

pm = dinamični #对于专用服务器, pm je mogoče nastaviti na statičen.
#如何控制子进程 so možnosti statične in dinamične. Če je izbran statični, pm.max_otrok določi določeno število otroških procesov. Če je izbran dinamični, ga določijo naslednji parametri:
pm.max_otrok #, največje število podprocesov
pm.start_servers #, število procesov ob zagonu
pm.min_spare_servers #, zagotovite minimalno število neaktivnih procesov in ustvarite nov podproces, če je neaktivni proces manjši od te vrednosti
pm.max_spare_servers#, zagotovite največje število neaktivnih procesov; če je neaktivni proces večji od te vrednosti, bo to očiščeno

pm.max_zahtevkov = 1000
#设置每个子进程重生之前服务的请求数. To je zelo uporabno za module tretjih oseb, ki lahko prihajajo do puščanja pomnilnika. Če je nastavljena na '0', je zahteva vedno sprejeta. Enakovredno PHP_FCGI_MAX_REQUESTS okoljske spremenljivke. Privzeto: 0.

pm.status_path = /status
#FPM状态页面的网址. Če nimate nastavitev, ne morete dostopati do statusne strani. Privzeto: nobenega. Uporabljeno bo spremljanje munin

ping.path = /ping
#FPM监控页面的ping网址. Če nimate nastavitev, ne morete dostopati do strani s pingom. Ta stran se uporablja za zunanje zaznavanje, ali je FPM aktiven in lahko odgovarja na zahteve. Upoštevajte, da se mora začeti s poševnico (/).

ping.response = pong
#用于定义ping请求的返回相应. Vrne besedilo v besedilni/navadni obliki za HTTP 200. Privzeto: pong.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Ta možnost je lahko uporabna za skripte, ki niso prekinjene iz posebnega razloga php.ini 'max_execution_time' v nastavitvah. Nastavljeno na '0' pomeni 'Izklopljeno'. To možnost lahko poskusite spremeniti, ko se napake 502 pogosto pojavljajo.

request_slowlog_timeout = 10 sekund
#当一个请求该设置的超时时间后 se ustrezne informacije o PHP klicnem skladu zapišejo v počasni dnevnik. Nastavljeno na '0' pomeni 'Izklopljeno'

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

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Privzeta vrednost: Privzeti odprti ročaj je 1024, ki ga je mogoče videti z ulimitom -n in spremeniti z ulimit -n 2048.

rlimit_core = 0
#设置核心rlimit最大限制值. Razpoložljive vrednosti: 'neomejeno', 0 ali pozitivna cela števila. Privzeta vrednost: Sistemsko definirana vrednost.

chroot =
#启动时的Chroot目录. Definirana mapa mora biti absolutna pot. Če ni nastavitve, se chroot ne uporablja.

chdir =
#设置启动目录 se Chdir samodejno pošlje v ta imenik, ko se začne. Definirana mapa mora biti absolutna pot. Privzeto: trenutna mapa, ali/direktorija (ko je chrootirana)

catch_workers_output = da
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Če ni nastavljeno, bosta stdout in stderr preusmerjena na /dev/null po pravilih FastCGI. Privzeto: Null.



Prilagajanje parametrov PHP-FPM

pm = dinamično; Označuje, katera metoda upravljanja količine procesov se uporablja

Dinamično pomeni, da je število PHP-FPM procesov dinamično, število je pm.start_servers določeno na začetku, če je več zahtev, se samodejno poveča, da se zagotovi, da število neaktivnih procesov ni manjše od pm.min_spare_servers, in če je število procesov veliko, se tudi ustrezno očisti, da presežek procesov ne presega pm.max_spare_servers

Statično pomeni, da je število procesov v php-fpm statično, število procesov pa je vedno tisto, kar določi pm.max_otroci, in se ne povečuje ali zmanjšuje

pm.max_otrok = 300; Število php-fpm procesov, ki so omogočeni v statičnem načinu
pm.start_servers = 20; Število začetnih php-fpm procesov v dinamičnem načinu
pm.min_spare_servers = 5; Minimalno število php-fpm procesov v dinamičnem načinu
pm.max_rezervni_strežniki = 35; Največje število php-fpm procesov v dinamičnem načinu

Če je pm statičen, je veljaven le parameter pm.max_children. Sistem bo odprl določeno število php-fpm procesov

Če je PM dinamičen, je parameter pm.max_children neveljaven in zadnji trije parametri začnejo veljati. Sistem začne pm.start_servers php-fpm procese na začetku izvajanja php-fpm in nato dinamično prilagaja število php-fpm procesov med pm.min_spare_servers in pm.max_spare_servers glede na potrebe sistema

Torej, katera metoda upravljanja projektov je boljša za naš strežnik? Pravzaprav, podobno kot pri Apache, bodo PHP programi po zagonu imeli težave z uhajanjem pomnilnika. Zato php-fpm proces na začetku zasede le približno 3 milijone pomnilnika, po daljšem delovanju pa se poveča na 20-30 milijonov.

Za strežnike z velikim pomnilnikom (kot je 8G ali več) je dejansko bolj primerno določiti statične max_children, saj to ne zahteva dodatnega nadzora procesov in izboljšuje učinkovitost. Ker pogosto preklapljanje med php-fpm procesi prav tako upočasni čas, je bolje vklopiti statične učinke, ko je pomnilnik dovolj velik. Količino je mogoče dobiti tudi glede na pomnilnik/30M, na primer 8GB pomnilnika lahko nastavimo na 100, nato pa je pomnilnik, ki ga porabi php-fpm, mogoče nadzorovati v 2G-3G. Če je pomnilnik nekoliko manjši, na primer 1G, je določitev števila statičnih procesov bolj primerna za stabilnost strežnika. To zagotavlja, da php-fpm dobi le dovolj pomnilnika in dodeli majhno količino pomnilnika drugim aplikacijam, kar omogoča bolj gladko delovanje sistema.

Za strežnik z majhnim pomnilnikom, kot je VPS z 256M pomnilnika, tudi če se izračuna glede na 20M pomnilnika, bo 10 php-cgi procesov porabilo 200M pomnilnika, potem bi moral biti sistemski sesutje normalen. Zato poskusite nadzorovati število php-fpm procesov in po približno razjasnitvi pomnilnika, ki ga zasedajo druge aplikacije, določiti statično majhno število podatkov, kar bo sistem naredilo bolj stabilnega. Ali pa uporabite dinamično metodo, saj bo dinamična metoda končala redundantni proces in povrnila nekaj pomnilnika, zato je priporočljivo uporabljati jo na strežnikih ali VPS z manj pomnilnika. Specifična največja količina se dobi na podlagi pomnilnika/20M. Na primer, za VPS 512M je priporočljivo nastaviti pm.max_spare_servers na 20. Kar zadeva pm.min_spare_servers, je priporočljivo, da ga nastavite glede na obremenitev strežnika, pri čemer je bolj primerna vrednost med 5~10.

200 na strežniku s 4G pomnilnikom je v redu (moj 1G testni računalnik, 64 je najboljši, priporočajo uporabo stresnega testa za najboljšo vrednost)

pm.max_zahtevkov = 10240;

Največja težava v nginx php-fpm konfiguraciji je notranji problem uhajanja: obremenitev strežnika ni velika, vendar se zasedenost pomnilnika hitro povečuje, hitro porablja pomnilnik in nato začne požirati swap particijo, sistem pa se hitro zatakne! Pravzaprav po uradnem uvodu php-cgi nima uhajanja pomnilnika, php-cgi pa bo pomnilnik pridobil nazaj po vsaki zaključeni zahtevi, vendar ne bo sproščen operacijskemu sistemu, kar bo povzročilo veliko količino pomnilnika z php-cgi.


Uradna rešitev je znižanje vrednosti PHP_FCGI_MAX_REQUESTS; če se uporablja php-fpm, je ustrezni php-fpm.conf max_requests, kar pomeni, koliko zahtev bo poslanih za ponovni zagon niti, moramo to vrednost ustrezno znižati, tako da php-fpm samodejno sprosti pomnilnik, ne pa večino 51200 na internetu itd., pravzaprav obstaja še ena vrednost, povezana s tem max_ Otroci, tako se vzpostavi število procesov vsakič, ko PHP-FPM, tako da je dejanska poraba pomnilnika max_children*max_requests* Vsaka zahteva porabi pomnilnik, na podlagi tega lahko ocenimo porabo pomnilnika, zato ni potrebe po pisanju skript za ubijanje.

request_terminate_timeout = 30;

Največji čas izvajanja, nastavljiv v php.ini (max_execution_time)

request_slowlog_timeout = 2; Vklopi počasne hlode
slowlog = log/$pool.log.slow; Počasna log pot

rlimit_files = 1024; Dodali smo omejitev php-fpm za odpiranje deskriptorjev datotek





Prejšnji:Alibaba Cloud SLB load balancing analiza HTTP zdravstvenega preverjanja
Naslednji:Dz X3.4 Preverjanje datotek – manjkajoče datoteke
 Najemodajalec| Objavljeno na 28. 11. 2021 13:42:00 |
[Vaja] Preverite status php-fpm preko Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Najemodajalec| Objavljeno na 19. 12. 2021 10:48:43 |
 Najemodajalec| Objavljeno na 16. 01. 2022 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_spare_servers
;             pm.max_rezervni_strežniki - največje število otrok v 'mirovanju'
; Privzeta vrednost: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_rezervni_strežniki = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep min_spare_servers
;             pm.min_spare_servers - minimalno število otrok v 'mirovanju'
; Privzeta vrednost: 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 - število otrok, ustvarjenih ob zagonu.
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
; Opomba: slowlog je obvezen, če je request_slowlog_timeout nastavljen
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep slowlog
; - 'počasni dnevnik'
; Opomba: slowlog je obvezen, če je request_slowlog_timeout nastavljen
slowlog = /alidata/log/php/$pool.log.slow
; preneseno v datoteko 'slowlog'. Vrednost '0' pomeni 'izklopljeno'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Nastavite descriptor odprte datoteke rlimit za glavni proces.
; rlimit_files = 1024
; Nastavi največjo omejitev velikosti jedra za glavni proces.
; rlimit_core = 0
; Nastavi deskriptor odprte datoteke rlimit.
; rlimit_files = 1024
; Nastavi maksimalno omejitev velikosti jedra.
; rlimit_core = 0
[root@old_server conf] #
 Najemodajalec| Objavljeno na 16. 01. 2022 16:54:04 |
request_terminate_timeout = 10 sekund

Privzeta vrednost je 0 sekund, kar pomeni, da se bo PHP skripta še naprej izvajala. Na ta način, ko so vsi php-cgi procesi zasedeni, Nginx+PHP spletni strežnik ne more več obdelovati novih PHP zahtevkov, zato Nginx uporabniku vrne "502 Bad Gateway". request_terminate_timeout = 30 sekund se lahko uporablja
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com