Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 11218|Risposta: 4

Configurazione e regolazione dei parametri PHP-FPM

[Copiato link]
Pubblicato su 26/07/2017 09:20:54 | | |
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





Precedente:Alibaba Cloud SLB bilanciamento del carico HTTP analisi di guasto del controllo di salute
Prossimo:File di verifica file DZ x3.4 Missing File
 Padrone di casa| Pubblicato su 28/11/2021 13:42:00 |
[Pratica] Controlla le informazioni di stato php-fpm tramite Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Padrone di casa| Pubblicato su 19/12/2021 10:48:43 |
 Padrone di casa| Pubblicato su 16/01/2022 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep max_spare_servers
;             pm.max_spare_servers - il numero massimo di figli in 'idle'
; Valore predefinito: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_server_sparance = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep min_spare_servers
;             pm.min_spare_servers - il numero minimo di bambini in 'idle'
; Valore predefinito: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 5
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP start_servers
;             pm.start_servers - il numero di figli creati all'avvio.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP max_requests
pm.max_richieste = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP request_slowlog_timeout
; Nota: il slowlog è obbligatorio se request_slowlog_timeout impostato
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Rallentamento del grep
; - 'rallentamento'
; Nota: il slowlog è obbligatorio se request_slowlog_timeout impostato
slowlog = /alidata/log/php/$pool.log.slow
; scaricato nel file 'slowlog'. Un valore di '0' significa 'spento'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rLimit
; Imposta il descriptor file aperto rlimit per il processo master.
; rlimit_files = 1024
; Imposta il limite massimo della dimensione del core rlimit per il processo master.
; rlimit_core = 0
; Imposta il descriptor del file aperto rlimit.
; rlimit_files = 1024
; Imposta il limite massimo del core.
; rlimit_core = 0
[root@old_server conferenza] #
 Padrone di casa| Pubblicato su 16/01/2022 16:54:04 |
request_terminate_timeout = 10

Il valore predefinito è 0 secondi, il che significa che lo script PHP continuerà ad essere eseguito. In questo modo, quando tutti i processi php-cgi sono occupati, il WebServer Nginx+PHP non può più gestire nuove richieste PHP e Nginx restituirà un "502 Bad Gateway" all'utente. request_terminate_timeout = 30 possono essere usati
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com