php-fpm.conf Viktiga parametrar förklaras i detalj
pid = run/php-fpm.pid #pid设置 rekommenderas det att aktivera var/run/php-fpm.pid i installationskatalogen som standard
error_log = log/php-fpm.log #错误日志 är standarden var/log/php-fpm.log i installationsmappen
log_level = meddelande #错误级别. De tillgängliga nivåerna är: varning, fel, varning, notis, felsökning. Standard: meddelande.
emergency_restart_threshold = 60 emergency_restart_interval = 60-talet # indikerar att om antalet php-cgi-processer med SIGSEGV- eller SIGBUS-fel överstiger emergency_restart_threshold inom emergency_restart_interval-värdet, kommer php-fpm att startas om smidigt. Dessa två alternativ förblir i allmänhet standard.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Tillgängliga enheter: s (sekunder), m (minuter), h (timmar) eller d (dagar) Standardenheter: s (sekunder). Standard: 0.
daemonize = ja #后台执行fpm är standardvärdet ja, och om du vill felsöka kan du ändra det till nej. I FPM kan olika inställningar användas för att köra flera processpooler. Dessa inställningar kan ställas in individuellt för varje processpool.
lyssna = 127.0.0.1:9000 #fpm监听端口, det vill säga adressen som bearbetas av PHP i nginx, är generellt standardvärdet. De tillgängliga formaten är: 'ip:port', 'port', '/path/to/unix/socket'. Varje processpool måste upprättas.
listen.backlog = -1 #backlog数, -1 betyder obegränsat, bestämt av operativsystemet, bara kommentera denna rad. Referens: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP, ställ in vilken som helst så att de inte begränsar IP, om du vill ställa in nginx för andra värdar att komma åt denna FPM-process måste du ställa in IP-adressen som kan nås på bekostnad av lyssnandet. Standardvärdet är valt. Varje adress separeras av ett kommatecken. Om den inte är inställd eller är tom, får vilken server som helst begära en anslutning
lyssna.ägare = www lyssna.grupp = www listen.mode = 0666 #unix socketinställningsalternativ, om du använder TCP för åtkomst kan du kommentera här.
användare = www grupp = www #启动进程的帐户和组
PM = dynamisk #对于专用服务器, PM kan ställas in på statisk. #如何控制子进程 är alternativen statiska och dynamiska. Om statisk är vald specificeras ett fast antal barnprocesser av pm.max_children. Om dynamisk väljs bestäms den av följande parametrar: pm.max_children #, det maximala antalet barnprocesser pm.start_servers #, antalet processer vid uppstart pm.min_spare_servers #, garantera ett minimum antal vilofyllda processer och skapa en ny barnprocess om den inaktiva processen är mindre än detta värde pm.max_spare_servers#, säkerställ maximalt antal inaktiva processer, om den inaktiva processen är större än detta värde kommer detta att rensas
pm.max_requests = 1000 #设置每个子进程重生之前服务的请求数. Detta är mycket användbart för tredjepartsmoduler som kan ha minnesläckor. Om den är satt till '0' accepteras alltid förfrågan. Ekvivalent med PHP_FCGI_MAX_REQUESTS miljövariabler. Standard: 0.
pm.status_path = /status #FPM状态页面的网址. Om du inte har inställningarna kan du inte komma åt statussidan. Standard: inga. Munin-övervakning kommer att användas
ping.path = /ping #FPM监控页面的ping网址. Om du inte har inställningarna kan du inte komma åt ping-sidan. Denna sida används för att externt upptäcka om FPM är aktiv och kan svara på förfrågningar. Observera att den måste börja med ett snedstreck (/).
ping.response = pong #用于定义ping请求的返回相应. Returnerar text i text-/klarformat för HTTP 200. Standard: pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Detta alternativ kan vara användbart för skript som inte avbryts av någon särskild anledning php.ini 'max_execution_time' i inställningarna. Att sätta till '0' betyder 'Av'. Du kan prova att ändra detta alternativ när 502-fel ofta förekommer.
request_slowlog_timeout = 10-tal #当一个请求该设置的超时时间后 kommer motsvarande PHP-anropsstackinformation att skrivas till den långsamma loggen. Att ställa in på '0' betyder 'Av'
slowlog = log/$pool.log.slow #慢请求的记录日志, använd med request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Standardvärde: Standardhandtaget är 1024, vilket kan visas med ulimit -n och modifieras med ulimit -n 2048.
rlimit_core = 0 #设置核心rlimit最大限制值. Tillgängliga värden: 'obegränsade', 0 eller positiva heltal. Standardvärde: Systemdefinierat värde.
chroot = #启动时的Chroot目录. Den definierade katalogen måste vara en absolut sökväg. Om det inte finns någon inställning används inte chroot.
chdir = #设置启动目录 skickas Chdir automatiskt till den katalogen när den startar. Den definierade katalogen måste vara en absolut sökväg. Standard: aktuell katalog, eller/katalog (när chrootad)
catch_workers_output = ja #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Om det inte är satt, kommer stdout och stderr att omdirigeras till /dev/null enligt FastCGI:s regler. Standard: Null.
PHP-FPM-parameterjustering
pm = dynamisk; Anger vilken metod för hantering av processmängdshantering som används
Dynamiskt betyder att antalet PHP-FPM-processer är dynamiskt, antalet anges pm.start_servers i början, om det finns fler förfrågningar ökar det automatiskt för att säkerställa att antalet inaktiva processer inte är mindre än pm.min_spare_servers, och om antalet processer är stort kommer det också att rensas upp därefter för att säkerställa att antalet överskottsprocesser inte är fler än pm.max_spare_servers
Statisk betyder att antalet processer i php-fpm är statiskt, och antalet processer är alltid det antal som anges av pm.max_children, och inte ökar eller minskar
pm.max_barn = 300; Antalet php-fpm-processer som är aktiverade i statiskt läge pm.start_servers = 20; Antalet startande php-fpm-processer i dynamiskt läge pm.min_spare_servers = 5; Det minsta antalet php-fpm-processer i dynamiskt läge pm.max_spare_servers = 35; Det maximala antalet php-fpm-processer i dynamiskt läge
Om pm är statisk är endast parametern pm.max_children gäld. Systemet öppnar ett visst antal php-fpm-processer
Om PM är dynamisk är parametern pm.max_children ogiltig, och de tre sista parametrarna träder i kraft. Systemet startar pm.start_servers php-fpm-processer i början av php-fpm-körningen och justerar sedan dynamiskt antalet php-fpm-processer mellan pm.min_spare_servers och pm.max_spare_servers enligt systemets behov
Så, vilken PM-metod är bäst att välja för vår server? Faktum är att, precis som Apache, kommer körning av PHP-program mer eller mindre att få minnesläckage efter körning. Det är därför en php-fpm-process bara tar upp cirka 3 miljoner minne i början, och efter att ha kört ett tag kommer den att stiga till 20–30 miljoner.
För servrar med stort minne (såsom 8G eller mer) är det faktiskt mer lämpligt att specificera statisk max_children, eftersom detta inte kräver ytterligare processkontroll och förbättrar effektiviteten. Eftersom frekvent växling av php-fpm-processer också fördröjer tiden, är det bättre att slå på statiska effekter när minnet är tillräckligt stort. Mängden kan också erhållas enligt minne/30M, till exempel kan 8 GB minne ställas in till 100, och sedan kan minnet som förbrukas av php-fpm styras i 2G-3G. Om minnet är något mindre, som 1G, är det mer fördelaktigt för serverns stabilitet att specificera antalet statiska processer. Detta säkerställer att php-fpm bara får tillräckligt med minne och tilldelar en liten mängd minne till andra applikationer, vilket gör att systemet fungerar smidigare.
För en server med lite minne, som en VPS med 256 miljoner minne, även om den beräknas enligt en minnesmängd på 20 m, kommer 10 php-cgi-processer att förbruka 200 miljoner minne, då borde systemkraschen vara normal. Därför bör du försöka kontrollera antalet php-fpm-processer, och efter att ha klargjort ungefär vilket minne som andra applikationer upptar, ange ett statiskt litet antal för det, vilket gör systemet mer stabilt. Eller använd den dynamiska metoden, eftersom den dynamiska metoden avslutar den redundanta processen och återtar lite minne, så det rekommenderas att använda den på servrar eller VPS med mindre minne. Den specifika maxmängden erhålls baserat på minne/20M. Till exempel, för en 512M VPS rekommenderas att sätta pm.max_spare_servers till 20. När det gäller pm.min_spare_servers rekommenderas det att ställa in den efter serverns belastning, och det mer lämpliga värdet är mellan 5~10.
200 på en server med 4G-minne är okej (min 1G-testmaskin, 64 är bäst, det rekommenderas att använda stresstest för att få bästa värde)
pm.max_requests = 10240;
Det största problemet i nginx php-fpm-konfigurationsprocessen är det interna läckageproblemet: belastningen på servern är inte stor, men minnesupptagningen ökar snabbt, slukar snabbt minnet och börjar sedan äta upp swap-partitionen, och systemet hänger sig snabbt! Faktum är att enligt den officiella introduktionen har php-cgi inget minnesläckage, och php-cgi kommer att återta minnet efter varje förfrågan, men kommer inte att släppas till operativsystemet, vilket gör att en stor mängd minne tas upp av php-cgi.
Den officiella lösningen är att sänka värdet på PHP_FCGI_MAX_REQUESTS, om php-fpm används är motsvarande php-fpm.conf max_requests, vilket betyder att hur många förfrågningar som skickas för att starta om tråden, vi behöver sänka detta värde på lämpligt sätt, så att php-fpm automatiskt frigör minne, inte de flesta av 51200 på Internet osv., faktiskt finns det ett annat värde relaterat till det max_ Barn, så många processer kommer att upprättas varje gång PHP-FPM, så att den faktiska minnesförbrukningen är max_children*max_requests* Varje förfrågan använder minne, enligt detta kan vi uppskatta minnesanvändningen, så det finns inget behov av att skriva skript för att döda.
request_terminate_timeout = 30;
Maximal exekveringstid, konfigurerbar i php.ini (max_execution_time)
request_slowlog_timeout = 2; Slå på långsamma stockar slowlog = log/$pool.log.slow; Långsam logaritmisk väg
rlimit_files = 1024; Lagt till en begränsning på php-fpm för att öppna filbeskrivningar
|