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
|