php-fpm.conf Belangrijke parameters worden in detail uitgelegd
pid = run/php-fpm.pid #pid设置 wordt aanbevolen om var/run/php-fpm.pid standaard in de installatiemap in te schakelen
error_log = log/php-fpm.log #错误日志 is de standaard var/log/php-fpm.log in de installatiemap
log_level = kennisgeving #错误级别. De beschikbare niveaus zijn: alert, error, warning, notice, debug. Standaard: kennisgeving.
emergency_restart_threshold = 60 emergency_restart_interval = 60s # geeft aan dat als het aantal php-cgi-processen met SIGSEGV- of SIGBUS-fouten emergency_restart_threshold binnen de emergency_restart_interval waarde overschrijdt, php-fpm soepel wordt herstart. Deze twee opties blijven over het algemeen de standaard.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Beschikbare eenheden: s (seconden), m (minuten), h (uren) of d (dagen) Standaardeenheden: s (seconden). Standaard: 0.
daemonize = ja #后台执行fpm is de standaardwaarde ja, en als je wilt debuggen, kun je die veranderen naar nee. In FPM kunnen verschillende instellingen worden gebruikt om meerdere procespools te draaien. Deze instellingen kunnen individueel worden ingesteld voor elke procespool.
luister = 127.0.0.1:9000 #fpm监听端口, dat wil zeggen het adres dat door PHP in nginx wordt verwerkt, is doorgaans de standaardwaarde. De beschikbare formaten zijn: 'ip:port', 'port', '/path/to/unix/socket'. Elke procespool moet worden opgezet.
listen.backlog = -1 #backlog数, -1 betekent onbeperkt, bepaald door het besturingssysteem, geef deze regel een opmerking. Referentie: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP stel je in dat je IP niet beperkt; als je de nginx van andere hosts wilt instellen om toegang te krijgen tot dit FPM-proces, moet je het IP-adres instellen dat toegankelijk is ten koste van luisteren. De standaardwaarde is 'willekeurig'. Elk adres wordt gescheiden door een komma. Als deze niet is ingesteld of leeg is, mag elke server een verbinding aanvragen
luister.eigenaar = www listen.group = www listen.mode = 0666 #unix socket-instelling, als je TCP gebruikt om toegang te krijgen, kun je hier reageren.
gebruiker = www groep = www #启动进程的帐户和组
pm = dynamisch #对于专用服务器, pm kan op statisch worden gezet. #如何控制子进程 zijn de opties statisch en dynamisch. Als statisch is geselecteerd, wordt een vast aantal kindprocessen gespecificeerd door pm.max_children. Als dynamisch wordt geselecteerd, wordt dit bepaald door de volgende parameters: pm.max_children #, het maximale aantal kindprocessen pm.start_servers #, het aantal processen bij het opstarten pm.min_spare_servers #, garandeert u een minimum aantal inactieve processen, en maakt een nieuw kindproces aan als het inactieve proces kleiner is dan deze waarde pm.max_spare_servers#, zorg voor het maximale aantal inactieve processen; als het inactieve proces groter is dan deze waarde, wordt dit opgeschoond
pm.max_requests = 1000 #设置每个子进程重生之前服务的请求数. Dit is erg handig voor modules van derden die mogelijk geheugenlekken hebben. Als het op '0' staat, wordt het verzoek altijd geaccepteerd. Gelijk aan PHP_FCGI_MAX_REQUESTS omgevingsvariabelen. Standaard: 0.
pm.status_path = /status #FPM状态页面的网址. Als je de instellingen niet hebt, kun je de statuspagina niet openen. Standaard: geen. Munin monitoring zal worden gebruikt
ping.path = /ping #FPM监控页面的ping网址. Als je de instellingen niet hebt, kun je niet bij de ping-pagina. Deze pagina wordt gebruikt om extern te detecteren of de FPM actief is en kan op verzoeken reageren. Let op dat het moet beginnen met een slash (/).
ping.response = pong #用于定义ping请求的返回相应. Geeft tekst terug in tekst-/plain-formaat voor HTTP 200. Standaard: pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Deze optie kan nuttig zijn voor scripts die niet om een speciale reden worden afgebroken php.ini 'max_execution_time' in de instellingen. Ingesteld op '0' betekent 'Uit'. Je kunt proberen deze optie te wijzigen wanneer 502-fouten vaak voorkomen.
request_slowlog_timeout = 10s #当一个请求该设置的超时时间后 wordt de bijbehorende PHP-aanroepstackinformatie naar het langzame logboek geschreven. Op '0' gezet betekent 'Uit'
slowlog = log/$pool.log.slow #慢请求的记录日志, gebruik met request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Standaardwaarde: De standaard open handle is 1024, die kan worden bekeken met ulimit -n en aangepast door ulimit -n 2048.
rlimit_core = 0 #设置核心rlimit最大限制值. Beschikbare waarden: 'onbeperkt', 0 of positieve gehele getallen. Standaardwaarde: Systeemgedefinieerde waarde.
chroot = #启动时的Chroot目录. De gedefinieerde map moet een absoluut pad zijn. Als er geen instelling is, wordt de chroot niet gebruikt.
chdir = #设置启动目录 wordt Chdir automatisch naar die map gestuurd wanneer het begint. De gedefinieerde map moet een absoluut pad zijn. Standaard: huidige map, of/map (wanneer gechroot)
catch_workers_output = ja #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Als het niet is ingesteld, worden stdout en stderr volgens de regels van FastCGI omgeleid naar /dev/null. Standaard: Null.
PHP-FPM parameterafstemming
pm = dynamisch; Geeft aan welke methode voor proceshoeveelhedenbeheer wordt gebruikt
Dynamisch betekent dat het aantal PHP-FPM-processen dynamisch is, het aantal wordt pm.start_servers aan het begin gespecificeerd, als er meer verzoeken zijn, zal het automatisch toenemen om ervoor te zorgen dat het aantal inactieve processen niet minder dan pm.min_spare_servers is, en als het aantal processen groot is, wordt het ook overeenkomstig opgeschoond om te voorkomen dat het aantal overtollige processen meer is dan pm.max_spare_servers
statisch betekent dat het aantal processen in php-fpm statisch is, en het aantal processen altijd het aantal is dat door pm.max_children is gespecificeerd, en niet toeneemt of afneemt
pm.max_kinderen = 300; Het aantal php-fpm-processen dat in statische modus is ingeschakeld pm.start_servers = 20; Het aantal startende php-fpm-processen in dynamische modus pm.min_spare_servers = 5; Het minimum aantal php-fpm-processen in dynamische modus pm.max_spare_servers = 35; Het maximale aantal php-fpm-processen in dynamische modus
Als pm statisch is, dan is alleen de parameter pm.max_children geldig. Het systeem opent een vast aantal php-fpm-processen
Als de PM dynamisch is, is de parameter pm.max_children ongeldig en treden de laatste drie parameters in werking. Het systeem start pm.start_servers php-fpm-processen aan het begin van de php-fpm-run en past vervolgens dynamisch het aantal php-fpm-processen tussen pm.min_spare_servers en pm.max_spare_servers aan volgens de behoeften van het systeem
Dus, welke PM-methode is beter om te kiezen voor onze server? Sterker nog, net als bij Apache, zal het draaien van PHP-programma's na uitvoering min of meer geheugenlekkage veroorzaken. Daarom neemt een php-fpm-proces aan het begin slechts ongeveer 3 miljoen geheugen in beslag, en na een tijdje te hebben gedraaid, stijgt het naar 20-30 miljoen.
Voor servers met groot geheugen (zoals 8G of meer) is het eigenlijk geschikter om statische max_children te specificeren, omdat dit geen extra procescontrole vereist en de efficiëntie verbetert. Omdat frequente schakelingen van php-fpm-processen ook vertraging veroorzaken, is het beter om statische effecten aan te zetten wanneer het geheugen groot genoeg is. De hoeveelheid kan ook worden verkregen volgens geheugen/30M, bijvoorbeeld kan 8GB geheugen worden ingesteld op 100, dan kan het geheugen dat door php-fpm wordt verbruikt worden geregeld in 2G-3G. Als het geheugen iets kleiner is, zoals 1G, is het specificeren van het aantal statische processen bevorderlijker voor de stabiliteit van de server. Dit zorgt ervoor dat php-fpm slechts genoeg geheugen krijgt en een kleine hoeveelheid geheugen toewijst aan andere applicaties, waardoor het systeem soepeler draait.
Voor een server met weinig geheugen, zoals een VPS met 256M geheugen, zelfs als het wordt berekend volgens een geheugenhoeveelheid van 20M, zullen 10 php-cgi-processen 200M geheugen verbruiken, dan zou de systeemcrash normaal moeten zijn. Daarom moet je proberen het aantal php-fpm-processen te controleren, en na het ongeveer verduidelijken van het geheugen dat door andere applicaties wordt ingenomen, een statisch klein aantal opgeven, wat het systeem stabieler maakt. Of gebruik de dynamische methode, omdat de dynamische methode het redundante proces beëindigt en wat geheugen terugwint, dus het wordt aanbevolen om het te gebruiken op servers of VPS met minder geheugen. De specifieke maximale hoeveelheid wordt verkregen op basis van geheugen/20M. Bijvoorbeeld, voor een 512M VPS wordt aanbevolen om pm.max_spare_servers op 20 te zetten. Wat betreft de pm.min_spare_servers wordt aanbevolen deze in te stellen op basis van de belasting van de server, en de meer geschikte waarde ligt tussen 5~10.
200 op een server met 4G-geheugen is prima (mijn 1G-testmachine, 64 is het beste, het wordt aanbevolen om een stresstest te gebruiken om de beste waarde te krijgen).
pm.max_requests = 10240;
Het grootste probleem in het nginx php-fpm configuratieproces is het interne lekprobleem: de belasting op de server is niet groot, maar het geheugengebruik neemt snel toe, verbruikt snel het geheugen en begint vervolgens de swappartitie te verslinden, waardoor het systeem snel vastloopt! Volgens de officiële inleiding heeft php-cgi geen geheugenlekkage en zal php-cgi geheugen terugwinnen na elk verzoek, maar niet aan het besturingssysteem worden vrijgegeven, waardoor een grote hoeveelheid geheugen door php-cgi wordt ingenomen.
De officiële oplossing is om de waarde van de PHP_FCGI_MAX_REQUESTS te verlagen; als php-fpm wordt gebruikt, is de bijbehorende php-fpm.conf de max_requests, wat betekent dat hoeveel verzoeken er worden gestuurd om de thread opnieuw te starten, we deze waarde passend moeten verlagen, zodat php-fpm automatisch geheugen vrijmaakt, niet de meeste 51200 op het internet, enzovoort, er is zelfs een andere waarde die eraan verbonden is max_ Kinderen, dit is hoe veel processen worden opgebouwd elke keer dat PHP-FPM wordt gebruikt, zodat het daadwerkelijke geheugenverbruik max_children*max_requests* is. Elke aanvraag gebruikt geheugen, op basis hiervan kunnen we het geheugengebruik schatten, dus er is geen noodzaak om scripts te schrijven om te killen.
request_terminate_timeout = 30;
Maximale uitvoeringstijd, configureerbaar in php.ini (max_execution_time)
request_slowlog_timeout = 2; Zet langzame stammen aan slowlog = log/$pool.log.slow; Langzaam logstampad
rlimit_files = 1024; Er is een limiet toegevoegd op php-fpm om bestandsdescriptors te openen
|