php-fpm.conf jsou podrobně vysvětleny důležité parametry
Pid = run/php-fpm.pid #pid设置 se doporučuje ve výchozím nastavení povolit var/run/php-fpm.pid v instalačním adresáři
error_log = log/php-fpm.log #错误日志 je výchozí varianta var/log/php-fpm.log v instalačním adresáři
log_level = oznámení #错误级别. Dostupné úrovně jsou: upozornění, chyba, varování, upozornění, ladění. Výchozí: upozornění.
emergency_restart_threshold = 60 emergency_restart_interval = 60. léta # znamená, že pokud počet php-cgi procesů s chybami SIGSEGV nebo SIGBUS překročí emergency_restart_threshold v rámci hodnoty emergency_restart_interval, php-fpm bude elegantně restartován. Tyto dvě možnosti zůstávají obecně výchozí.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Dostupné jednotky: s (sekundy), m (minuty), h (hodiny) nebo d (dny) Výchozí jednotky: s (sekundy). Výchozí: 0.
Daemonize = ano #后台执行fpm výchozí hodnota je ano, a pokud chcete ladit, můžete ji změnit na ne. V FPM lze použít různá nastavení pro provoz více procesních poolů. Tato nastavení lze nastavit zvlášť pro každý procesní pool.
listen = 127.0.0.1:9000 #fpm监听端口, tedy adresa zpracovaná PHP v nginx, je obecně výchozí hodnotou. Dostupné formáty jsou: 'ip:port', 'port', '/path/to/unix/socket'. Každý procesní pool je třeba nastavit.
listen.backlog = -1 #backlog数, -1 znamená neomezené, určované operačním systémem, stačí napsat tento řádek. Reference: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP nastavte žádné tak, aby neomezovaly IP, pokud chcete nastavit nginx ostatních hostitelů pro přístup k tomuto FPM procesu, musíte nastavit IP adresu, ke které lze přistupovat, ale za cenu poslechu. Výchozí hodnota je libovolná. Každá adresa je oddělena čárkou. Pokud není nastavena nebo je prázdná, může jakýkoli server požádat o spojení
listen.owner = www listen.group = www listen.mode = 0666 #unix nastavení socketu, pokud používáte TCP pro přístup, můžete zde napsat komentář.
uživatel = www skupina = www #启动进程的帐户和组
pm = dynamický #对于专用服务器, pm lze nastavit na statické. #如何控制子进程 jsou možnosti statické a dynamické. Pokud je zvolen statický faktor, je specifikován pevně daný počet podprocesů pomocí pm.max_children. Pokud je zvolena dynamická funkce, je určena následujícími parametry: pm.max_děti #, maximální počet podprocesů pm.start_servers #, počet procesů při startu pm.min_spare_servers #, garantujte minimální počet nečinných procesů a vytvořte nový podproces, pokud je nečinný proces menší než tato hodnota pm.max_spare_servers#, zajistěte maximální počet nečinných procesů, pokud je nečinný proces větší než tato hodnota, bude tento proces vyčištěn
pm.max_requests = 1000 #设置每个子进程重生之前服务的请求数. To je velmi užitečné u modulů třetích stran, které mohou mít úniky paměti. Pokud je požadavek nastaven na '0', je vždy přijat. Ekvivalent PHP_FCGI_MAX_REQUESTS proměnných prostředí. Výchozí: 0.
pm.status_path = /stav #FPM状态页面的网址. Pokud nemáte nastavení, nemůžete se dostat na stránku stavu. Výchozí: žádné. Bude použito monitorování munin
ping.path = /ping #FPM监控页面的ping网址. Pokud nemáš nastavení, nemůžeš se dostat na stránku pingu. Tato stránka slouží k externí detekci, zda je FPM aktivní a může reagovat na požadavky. Všimněte si, že musí začínat na lomítko (/).
ping.response = pong #用于定义ping请求的返回相应. Vrací text v textovém/prostém formátu pro HTTP 200. Výchozí: pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Tato možnost může být užitečná pro skripty, které nejsou zrušeny z nějakého zvláštního důvodu php.ini 'max_execution_time' v nastavení. Nastavit '0' znamená 'Vypnuto'. Můžete zkusit tuto možnost změnit, když se často vyskytují chyby 502.
request_slowlog_timeout = 10 sekund #当一个请求该设置的超时时间后 budou odpovídající informace z PHP volání zapsány do pomalého logu. Nastaveno na '0' znamená 'Vypnuto'
slowlog = log/$pool.log.slow #慢请求的记录日志, použít s request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Výchozí hodnota: Výchozí otevřený handle je 1024, který lze zobrazit pomocí ulimit -n a upravit pomocí ulimit -n 2048.
rlimit_core = 0 #设置核心rlimit最大限制值. Dostupné hodnoty: 'neomezené', 0 nebo kladná celá čísla. Výchozí hodnota: Systémově definovaná hodnota.
chroot = #启动时的Chroot目录. Definovaný adresář musí být absolutní cesta. Pokud není nastavení, chroot se nepoužívá.
chdir = #设置启动目录 je Chdir automaticky odeslán do tohoto adresáře při jeho spuštění. Definovaný adresář musí být absolutní cesta. Výchozí: aktuální adresář, nebo/adresář (při chrootování)
catch_workers_output = ano #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Pokud není nastaveno, stdout a stderr budou podle pravidel FastCGI přesměrovány na /dev/null. Výchozí: Null.
Ladění parametrů PHP-FPM
pm = dynamický; Uvádí, která metoda řízení množství procesů je použita
Dynamic znamená, že počet PHP-FPM procesů je dynamický, počet je pm.start_servers specifikován na začátku, pokud je více požadavků, automaticky se zvýší, aby počet nečinných procesů nebyl menší než pm.min_spare_servers, a pokud je počet procesů velký, bude také odpovídajícím způsobem vyčištěn, aby počet přebytečných procesů nepřesáhl pm.max_spare_servers
Statický znamená, že počet procesů v php-fpm je statický a počet procesů je vždy počet specifikovaný pm.max_children a nezvyšuje se ani nesnižuje
pm.max_dětí = 300; Počet php-fpm procesů, které jsou povoleny ve statickém režimu pm.start_servers = 20; Počet startujících php-fpm procesů v dynamickém režimu pm.min_spare_servers = 5; Minimální počet php-fpm procesů v dynamickém režimu pm.max_spare_servers = 35; Maximální počet php-fpm procesů v dynamickém režimu
Pokud je pm statické, platí pouze parametr pm.max_children. Systém otevře určitý počet php-fpm procesů
Pokud je PM dynamický, parametr pm.max_children je neplatný a poslední tři parametry se aktivují. Systém spustí pm.start_servers php-fpm procesy na začátku běhu php-fpm a poté dynamicky upravuje počet php-fpm procesů mezi pm.min_spare_servers a pm.max_spare_servers podle potřeb systému
Takže, kterou metodu PM je lepší zvolit pro náš server? Ve skutečnosti, stejně jako Apache, i při spuštění budou PHP programy víceméně problémy s únikem paměti. Proto proces php-fpm zabírá na začátku jen asi 3 miliony paměti a po nějaké době běhu se to zvýší na 20-30 milionů.
U serverů s velkou pamětí (například 8G nebo více) je vlastně vhodnější specifikovat statickou max_children, protože to nevyžaduje další řízení procesů a zvyšuje efektivitu. Protože časté přepínání procesů php-fpm také zpomaluje čas, je lepší zapnout statické efekty, když je paměť dostatečně velká. Množství lze také získat podle paměti/30M, například 8GB paměti lze nastavit na 100, pak lze paměť spotřebovanou php-fpm ovládat v 2G-3G. Pokud je paměť o něco menší, například 1G, pak je určení počtu statických procesů příznivější pro stabilitu serveru. To zajišťuje, že php-fpm získá pouze dostatek paměti a přiděluje malé množství paměti ostatním aplikacím, což umožní plynulejší chod systému.
U serveru s malou pamětí, jako je VPS s 256M paměti, i když je počítáno podle 20M paměti, 10 php-cgi procesů spotřebuje 200M paměti, pak by pád systému měl být normální. Proto byste měli zkusit kontrolovat počet php-fpm procesů a po hrubém vyjasnění paměti zabírané jinými aplikacemi specifikovat statické malé číslo, které systém učiní stabilnějším. Nebo použít dynamickou metodu, protože dynamická metoda ukončí redundantní proces a získá zpět část paměti, proto se doporučuje používat ji na serverech nebo VPS s menším množstvím paměti. Konkrétní maximální množství se získává na základě paměti/20M. Například pro 512M VPS se doporučuje nastavit pm.max_spare_servers na 20. Co se týče pm.min_spare_servers, doporučuje se nastavit ho podle zatížení serveru a vhodnější hodnota je mezi 5~10.
200 na serveru s 4G pamětí je v pořádku (můj 1G testovací stroj, 64 je nejlepší, doporučuje se použít zátěžový test pro nejlepší hodnotu)
pm.max_requests = 10240;
Největším problémem v nginx php-fpm konfiguračním procesu je vnitřní únik informací: zátěž na serveru není velká, ale obsazení paměti rychle roste, rychle ji spotřebovává, pak začne pohlcovat swap partition, a systém se rychle zasekne! Podle oficiálního úvodu php-cgi nemá únik paměti a php-cgi po dokončení každého požadavku paměť obnoví, ale nebude uvolněna do operačního systému, což způsobí velké množství paměti zabírajícího php-cgi.
Oficiálním řešením je snížit hodnotu PHP_FCGI_MAX_REQUESTS, pokud se použije php-fpm, odpovídající php-fpm.conf je max_requests, což znamená, kolik požadavků bude odesláno k restartu vlákna, musíme tuto hodnotu správně snížit, aby php-fpm automaticky uvolnil paměť, ne většinu z 51200 na internetu atd., ve skutečnosti existuje ještě jedna hodnota s tím spojená max_ Děti, takto se při každém php-fpm zřídí počet procesů, takže skutečná spotřeba paměti bude max_children*max_requests* Každý požadavek využívá paměť, podle toho můžeme odhadnout využití paměti, takže není potřeba psát skripty k zabití.
request_terminate_timeout = 30;
Maximální doba vykonání, konfigurovatelná v php.ini (max_execution_time)
request_slowlog_timeout = 2; Zapněte pomalé klády slowlog = log/$pool.log.slow; Pomalá logarimátní cesta
rlimit_files = 1024; Přidáno omezení na php-fpm pro otevírání souborových deskriptorů
|