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
|