I parametri importanti di php-fpm.conf sono spiegati in dettaglio
PID = run/php-fpm.pid #pid设置, si consiglia di abilitare di default var/run/php-fpm.pid nella directory di installazione
error_log = log/php-fpm.log #错误日志, il valore predefinito è var/log/php-fpm.log nella directory di installazione
log_level = avviso #错误级别. I livelli disponibili sono: allarme, errore, avviso, avviso, debug. Predefinito: avviso.
emergency_restart_threshold = 60 emergency_restart_interval = 60 # indica che se il numero di processi php-CGI con errori SIGSEGV o SIGBUS supera emergency_restart_threshold entro il valore emergency_restart_interval, php-fpm verrà riavviato con grazia. Queste due opzioni generalmente rimangono la predefinita.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Unità disponibili: s (secondi), m (minuti), h (ore) o d (giorni) Unità predefinite: s (secondi). Predefinito: 0.
Daemonize = sì #后台执行fpm, il valore predefinito è sì, e se vuoi fare il debug, puoi cambiarlo in no. In FPM, diverse impostazioni possono essere utilizzate per eseguire più pool di processi. Queste impostazioni possono essere impostate individualmente per ogni pool di processo.
ascolta = 127.0.0.1:9000 #fpm监听端口, cioè l'indirizzo elaborato da PHP in nginx, è generalmente il valore predefinito. I formati disponibili sono: 'ip:port', 'port', '/path/to/unix/socket'. Ogni pool di processo deve essere configurato.
listen.backlog = -1 #backlog数, -1 significa illimitato, determinato dal sistema operativo, basta commentare questa riga. Riferimento: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP, imposta qualsiasi per non limitare l'IP, se vuoi impostare il nginx degli altri host per accedere a questo processo FPM, devi impostare l'indirizzo IP che può essere consultato a costo dell'ascolto. Il valore predefinito è qualsiasi altro. Ogni indirizzo è separato da una virgola. Se non è impostato o è vuoto, qualsiasi server può richiedere una connessione
ascolta.proprietario = www listen.group = www listen.mode = 0666 #unix opzione di impostazione socket, se usi TCP per accedere, puoi commentare qui.
utente = www gruppo = www #启动进程的帐户和组
PM = #对于专用服务器 dinamico, PM può essere impostato su statico. #如何控制子进程, le opzioni sono statiche e dinamiche. Se viene selezionato statico, un numero fisso di processi figli viene specificato da pm.max_children. Se viene selezionato dinamico, è determinato dai seguenti parametri: pm.max_children #, il numero massimo di processi figli pm.start_servers #, il numero di processi all'avvio pm.min_spare_servers #, garantire un numero minimo di processi inattivi e creare un nuovo processo figlio se il processo inattivo è inferiore a questo valore pm.max_spare_servers#, assicurati il massimo numero di processi inattivi; se il processo inattivo è superiore a questo valore, questo verrà ripulito
pm.max_richieste = 1000 #设置每个子进程重生之前服务的请求数. Questo è molto utile per moduli di terze parti che potrebbero avere perdite di memoria. Se impostata su '0', la richiesta viene sempre accettata. Equivalente a PHP_FCGI_MAX_REQUESTS variabili ambientali. Predefinito: 0.
pm.status_path = /status #FPM状态页面的网址. Se non hai le impostazioni, non puoi accedere alla pagina di stato. Predefinito: nessuno. Verrà utilizzato il monitoraggio di Munin
ping.path = /ping #FPM监控页面的ping网址. Se non hai le impostazioni, non puoi accedere alla pagina del ping. Questa pagina viene utilizzata per rilevare esternamente se l'FPM è attivo e può rispondere alle richieste. Nota che deve iniziare con una barra (/).
ping.response = pong #用于定义ping请求的返回相应. Restituisce testo in formato testo/semplice per HTTP 200. Predefinito: pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Questa opzione può essere utile per script che non vengono annullati per qualche motivo particolare php.ini 'max_execution_time' nelle impostazioni. Impostato su '0' significa 'Spento'. Puoi provare a cambiare questa opzione quando si incontrano frequentemente errori 502.
request_slowlog_timeout = 10 #当一个请求该设置的超时时间后, le corrispondenti informazioni dello stack di chiamate PHP verranno scritte nel log lento. Impostato su '0' significa 'Spento'
slowlog = log/$pool.log.slow #慢请求的记录日志, usa con request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Valore predefinito: L'handle aperto predefinito è 1024, che può essere visualizzato con ulimit -n e modificato con ulimit -n 2048.
rlimit_core = 0 #设置核心rlimit最大限制值. Valori disponibili: 'illimitati', 0 o interi positivi. Valore predefinito: valore definito dal sistema.
chroot = #启动时的Chroot目录. La directory definita deve essere un percorso assoluto. Se non c'è un'impostazione, la chroot non viene utilizzata.
chdir = #设置启动目录, Chdir viene inviato automaticamente a quella directory quando si avvia. La directory definita deve essere un percorso assoluto. Predefinito: directory corrente, o/directory (quando è chrootata)
catch_workers_output = sì #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Se non impostato, stdout e stderr verranno reindirizzati a /dev/null secondo le regole di FastCGI. Predefinito: Null.
Regolazione dei parametri PHP-FPM
PM = dinamico; Indica quale metodo di gestione delle quantità di processo viene utilizzato
Dinamico significa che il numero di processi PHP-FPM è dinamico, il numero è pm.start_servers specificato all'inizio, se ci sono più richieste aumenterà automaticamente per garantire che il numero di processi inattivi non sia inferiore a pm.min_spare_servers, e se il numero di processi è elevato, verrà anche ripulito di conseguenza per garantire che il numero di processi in eccesso non superi pm.max_spare_servers
statico significa che il numero di processi in php-fpm è statico, e il numero di processi è sempre il numero specificato da pm.max_children, e non aumenta né diminuisce
pm.max_figli = 300; Il numero di processi php-fpm abilitati in modalità statica pm.start_servers = 20; Il numero di processi php-fpm iniziali in modalità dinamica pm.min_spare_servers = 5; Il numero minimo di processi php-fpm in modalità dinamica pm.max_server_sparring = 35; Il numero massimo di processi php-fpm in modalità dinamica
Se pm è statico, allora solo il parametro pm.max_children è valido. Il sistema aprirà un numero prestabilito di processi php-fpm
Se il PM è dinamico, allora il parametro pm.max_children è invalido e gli ultimi tre parametri entrano in atto. Il sistema avvierà pm.start_servers processi php-fpm all'inizio dell'esecuzione php-fpm, e poi adeguerà dinamicamente il numero di processi php-fpm tra pm.min_spare_servers e pm.max_spare_servers in base alle esigenze del sistema
Quindi, quale metodo PM è migliore scegliere per il nostro server? Infatti, come Apache, eseguire programmi PHP avrà più o meno problemi di perdita di memoria dopo l'esecuzione. Ecco perché un processo php-fpm occupa solo circa 3M di memoria all'inizio e, dopo un po' di esecuzione, salirà a 20-30M.
Per server con memoria grande (come 8G o più), è in realtà più appropriato specificare max_children statici, poiché ciò non richiede un controllo aggiuntivo del processo e migliora l'efficienza. Poiché il frequente cambio di processi php-fpm farà anche ritardi nel tempo, sarà meglio attivare gli effetti statici quando la memoria è sufficientemente grande. La quantità può essere ottenuta anche secondo la memoria/30M, ad esempio, 8GB di memoria possono essere impostati a 100, quindi la memoria consumata da php-fpm può essere controllata in 2G-3G. Se la memoria è leggermente più piccola, ad esempio 1G, allora specificare il numero di processi statici è più favorevole alla stabilità del server. Questo garantisce che php-fpm riceva solo abbastanza memoria e allochi una piccola quantità di memoria ad altre applicazioni, il che renderà il sistema più fluido.
Per un server con memoria piccola, come un VPS con 256M, anche se calcolata in base a una quantità di memoria di 20M, 10 processi php-CGI consumeranno 200M di memoria, quindi il crash del sistema dovrebbe essere normale. Pertanto, dovresti cercare di controllare il numero di processi php-fpm e, dopo aver chiarito approssimativamente la memoria occupata da altre applicazioni, specificare un numero statico e piccolo per esso, che renderà il sistema più stabile. Oppure usa il metodo dinamico, perché il metodo dinamico terminerà il processo ridondante e recupererà parte della memoria, quindi si consiglia di usarlo su server o VPS con meno memoria. La quantità massima specifica si ottiene in base alla memoria/20M. Ad esempio, per un VPS 512M, si consiglia di impostare pm.max_spare_servers a 20. Per quanto riguarda il pm.min_spare_servers, si consiglia di impostarlo in base al carico del server, e il valore più appropriato è tra 5~10.
200 su un server con memoria 4G va bene (la mia macchina di prova 1G, 64 è la migliore, si consiglia di usare stress test per ottenere il miglior rapporto qualità-prezzo)
pm.max_richieste = 10240;
Il problema più grande nel processo di configurazione nginx php-fpm è il problema della perdita interna: il carico sul server non è grande, ma l'occupazione della memoria aumenta rapidamente, consumando rapidamente la memoria e iniziando a consumare la partizione swap, e il sistema si blocca rapidamente! Infatti, secondo l'introduzione ufficiale, php-cgi non presenta perdite di memoria, e php-cgi recupererà memoria dopo ogni richiesta, ma non verrà rilasciata sul sistema operativo, il che causerà l'occupazione di una grande quantità di memoria da php-cgi.
La soluzione ufficiale è abbassare il valore del PHP_FCGI_MAX_REQUESTS, se si usa php-fpm, il corrispondente php-fpm.conf è il max_requests, il che significa che quante richieste verranno inviate per riavviare il thread, dobbiamo abbassare questo valore in modo appropriato, così che php-fpm liberi automaticamente memoria, non la maggior parte dei 51200 su Internet, ecc., infatti c'è un altro valore correlato a esso max_ Figli, questo è il numero di processi che verranno creati ogni volta PHP-FPM, così che il consumo effettivo di memoria sia max_children*max_requests* Ogni richiesta utilizza memoria; secondo questo possiamo stimare l'uso di memoria, quindi non c'è bisogno di scrivere script da eliminare.
request_terminate_timeout = 30;
Tempo massimo di esecuzione, configurabile in php.ini (max_execution_time)
request_slowlog_timeout = 2; Accendi i tronchi lenti rallentamento = log/$pool.log.lento; Percorso lento del tronco
rlimit_files = 1024; Aggiunto un limite su php-fpm ai descrittori di file aperti
|