Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 11218|Respuesta: 4

Configuración y ajuste de parámetros PHP-FPM

[Copiar enlace]
Publicado en 26/7/2017 9:20:54 | | |
Los parámetros importantes de php-fpm.conf se explican en detalle

PID = run/php-fpm.pid
#pid设置, se recomienda habilitar por defecto var/run/php-fpm.pid en el directorio de instalación

error_log = log/php-fpm.log
#错误日志, el valor por defecto es var/log/php-fpm.log en el directorio de instalación

log_level = aviso
#错误级别. Los niveles disponibles son: alerta, error, advertencia, aviso, depuración. Por defecto: aviso.

emergency_restart_threshold = 60
emergency_restart_interval = 60s
# indica que si el número de procesos php-CGI con errores SIGSEGV o SIGBUS supera emergency_restart_threshold dentro del valor de emergency_restart_interval, php-fpm se reiniciará correctamente. Estas dos opciones suelen seguir siendo las predeterminadas.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Unidades disponibles: s (segundos), m (minutos), h (horas) o d (días) Unidades por defecto: s (segundos). Valor por defecto: 0.

Daemonize = sí
#后台执行fpm, el valor por defecto es sí, y si quieres depurar, puedes cambiarlo a no. En FPM, se pueden usar diferentes configuraciones para ejecutar múltiples pools de procesos. Estos ajustes pueden configurarse individualmente para cada pool de procesos.

escuchar = 127.0.0.1:9000
#fpm监听端口, es decir, la dirección procesada por PHP en nginx, es generalmente el valor por defecto. Los formatos disponibles son: 'ip:puerto', 'puerto', '/camino/a/unix/socket'. Cada pool de procesos debe configurarse.

listen.backlog = -1
#backlog数, -1 significa ilimitado, determinado por el sistema operativo, solo comenta esta línea. Referencia: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP, configura cualquiera para que no restricja la IP; si quieres configurar el nginx de otros hosts para acceder a este proceso FPM, tienes que establecer la dirección IP a la que se puede acceder a costa de escuchar. El valor por defecto es cualquiera. Cada dirección está separada por una coma. Si no está configurado o está vacío, cualquier servidor puede solicitar una conexión

listen.owner = www
listen.group = www
modo escuchar = 0666
#unix opción de configuración de socket, si usas TCP para acceder, puedes comentar aquí.

usuario = www
Grupo = www
#启动进程的帐户和组

PM = #对于专用服务器 dinámico, PM puede ponerse en estático.
#如何控制子进程, las opciones son estáticas y dinámicas. Si se selecciona estático, pm.max_children especifica un número fijo de procesos hijos. Si se selecciona dinámica, se determina mediante los siguientes parámetros:
pm.max_hijos #, el número máximo de procesos hijos
pm.start_servers #, el número de procesos en el inicio
pm.min_spare_servers #, garantizar un número mínimo de procesos inactivos y crear un nuevo proceso hijo si el proceso inactivo es menor que este valor
pm.max_spare_servers#, asegura el número máximo de procesos inactivos; si el proceso inactivo es mayor que este valor, esto se limpiará

pm.max_solicitudes = 1000
#设置每个子进程重生之前服务的请求数. Esto es muy útil para módulos de terceros que pueden tener fugas de memoria. Si se configura en '0', la solicitud siempre se acepta. Equivalente a PHP_FCGI_MAX_REQUESTS variables de entorno. Valor por defecto: 0.

pm.status_path = /estado
#FPM状态页面的网址. Si no tienes la configuración, no puedes acceder a la página de estado. Por defecto: ninguno. Se utilizará la monitorización de Munin

ping.path = /ping
#FPM监控页面的ping网址. Si no tienes la configuración, no puedes acceder a la página de ping. Esta página se utiliza para detectar externamente si el FPM está activo y puede responder a solicitudes. Ten en cuenta que debe empezar con una barra (/).

ping.response = pong
#用于定义ping请求的返回相应. Devuelve texto en formato texto/plano para HTTP 200. Por defecto: pong.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Esta opción puede ser útil para scripts que no se abortan por alguna razón especial php.ini 'max_execution_time' en la configuración. Configurado en '0' significa 'Apagado'. Puedes intentar cambiar esta opción cuando se encuentren con frecuencia errores 502.

request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后, la información correspondiente de la pila de llamadas PHP se escribirá en el registro lento. Poner en '0' significa 'Apagado'

slowlog = log/$pool.log.slow
#慢请求的记录日志, úsalo con request_slowlog_timeout

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Valor por defecto: El handle abierto por defecto es 1024, que puede verse con ulimit -n y modificarse con ulimit -n 2048.

rlimit_core = 0
#设置核心rlimit最大限制值. Valores disponibles: 'ilimitado', 0 o enteros positivos. Valor por defecto: Valor definido por el sistema.

chroot =
#启动时的Chroot目录. El directorio definido debe ser un camino absoluto. Si no hay configuración, no se usa la chroot.

chdir =
#设置启动目录, Chdir se envía automáticamente a ese directorio cuando se inicia. El directorio definido debe ser un camino absoluto. Por defecto: directorio actual, o/directorio (cuando se hace chroot)

catch_workers_output = sí
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Si no está activado, stdout y stderr serán redirigidos a /dev/null según las reglas de FastCGI. Por defecto: Nulo.



Ajuste de parámetros PHP-FPM

pm = dinámico; Indica qué método de gestión de cantidades de proceso se utiliza

Dinámico significa que el número de procesos PHP-FPM es dinámico, el número se especifica pm.start_servers al principio, si hay más solicitudes, aumentará automáticamente para asegurar que el número de procesos inactivos no sea menor de pm.min_spare_servers, y si el número de procesos es grande, también se limpiará en consecuencia para asegurar que el número de procesos excedentes no supere pm.max_spare_servers

Static significa que el número de procesos en php-fpm es estático, y el número de procesos es siempre el especificado por pm.max_hijos, y no aumenta ni disminuye

pm.max_hijos = 300; El número de procesos php-fpm que están habilitados en modo estático
pm.start_servers = 20; El número de procesos php-fpm iniciales en modo dinámico
pm.min_spare_servers = 5; El número mínimo de procesos php-fpm en modo dinámico
pm.max_servidores_de reserva = 35; El número máximo de procesos php-fpm en modo dinámico

Si pm es estático, entonces solo el parámetro pm.max_children es válido. El sistema abrirá un número determinado de procesos php-fpm

Si el PM es dinámico, entonces el parámetro pm.max_children es inválido y los tres últimos parámetros entran en vigor. El sistema iniciará pm.start_servers procesos php-fpm al inicio de la ejecución php-fpm y luego ajustará dinámicamente el número de procesos php-fpm entre pm.min_spare_servers y pm.max_spare_servers según las necesidades del sistema

Entonces, ¿qué método de PM es mejor para nuestro servidor? De hecho, al igual que Apache, ejecutar programas PHP tendrá más o menos problemas de fuga de memoria tras la ejecución. Por eso un proceso php-fpm solo ocupa unos 3M de memoria al principio, y tras funcionar un tiempo, subirá a 20-30M.

Para servidores con memoria grande (como 8G o más), en realidad es más apropiado especificar max_children estática, ya que esto no requiere control adicional de procesos y mejora la eficiencia. Como el cambio frecuente de procesos php-fpm también retrasará el tiempo, será mejor activar los efectos estáticos cuando la memoria sea lo suficientemente grande. La cantidad también puede obtenerse según la memoria/30M; por ejemplo, se pueden ajustar 8GB de memoria a 100, y entonces la memoria consumida por php-fpm puede controlarse en 2G-3G. Si la memoria es ligeramente menor, como 1G, entonces especificar el número de procesos estáticos es más favorable para la estabilidad del servidor. Esto asegura que php-fpm solo reciba suficiente memoria y asigne una pequeña cantidad de memoria a otras aplicaciones, lo que hará que el sistema funcione de forma más fluida.

Para un servidor con memoria pequeña, como un VPS con 256 M de memoria, incluso si se calcula según una cantidad de memoria de 20 M, 10 procesos php-CGI consumirán 200 M de memoria, entonces el fallo del sistema debería ser normal. Por lo tanto, deberías intentar controlar el número de procesos php-fpm y, tras aclarar aproximadamente la memoria ocupada por otras aplicaciones, especificar un número pequeño estático para ello, lo que hará el sistema más estable. O usar el método dinámico, porque el método dinámico terminará el proceso redundante y recuperará algo de memoria, por lo que se recomienda usarlo en servidores o VPS con menos memoria. La cantidad máxima específica se obtiene en función de la memoria/20M. Por ejemplo, para un VPS 512M, se recomienda configurar pm.max_spare_servers en 20. En cuanto al pm.min_spare_servers, se recomienda configurarlo según la carga del servidor, y el valor más apropiado está entre 5~10.

200 en un servidor con memoria 4G está bien (mi máquina de pruebas 1G, 64 es la mejor, se recomienda usar test de estrés para obtener la mejor relación calidad-precio)

pm.max_solicitudes = 10240;

El mayor problema en el proceso de configuración nginx php-fpm es el problema de fugas internas: la carga en el servidor no es grande, pero la ocupación de memoria aumenta rápidamente, consumiendo rápidamente la memoria y luego empezando a consumir la partición de swap, ¡y el sistema se cuelga rápidamente! De hecho, según la introducción oficial, php-CGI no tiene fuga de memoria, y php-cgi recuperará memoria tras completar cada solicitud, pero no será liberado para el sistema operativo, lo que hará que php-CGI ocupe una gran cantidad de memoria.


La solución oficial es reducir el valor del PHP_FCGI_MAX_REQUESTS; si se usa php-fpm, el php-fpm.conf correspondiente es el max_requests, lo que significa que cuántas peticiones se enviarán para reiniciar el hilo, necesitamos bajar este valor adecuadamente, para que php-fpm libere automáticamente memoria, no la mayoría de los 51200 en Internet, etc., de hecho, hay otro valor relacionado con él max_ Hijos, así es cuántos procesos se establecen cada vez que PHPs-FPM, de modo que el consumo real de memoria sea max_children*max_requests* Cada solicitud usa memoria; según esto podemos estimar el uso de memoria, así que no hay necesidad de escribir scripts para matar.

request_terminate_timeout = 30;

Tiempo máximo de ejecución, configurable en php.ini (max_execution_time)

request_slowlog_timeout = 2; Enciende los troncos lentos
slowlog = log/$pool.log.slow; Camino lento de tronco

rlimit_files = 1024; Se añadió un límite en php-fpm a los descriptores de archivo abiertos





Anterior:Alibaba Cloud SLB, análisis de fallo en la comprobación de salud HTTP
Próximo:Archivos faltantes de verificación de archivos DZ x3.4
 Propietario| Publicado en 28/11/2021 13:42:00 |
[Práctica] Consulta la información de estado de php-fpm a través de Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Propietario| Publicado en 19/12/2021 10:48:43 |
 Propietario| Publicado en 16/1/2022 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP max_spare_servers
;             pm.max_spare_servers - el número máximo de hijos en 'idle'
; Valor por defecto: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_servidores_de reserva = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP min_spare_servers
;             pm.min_spare_servers - el número mínimo de niños en 'inactividad'
; Valor por defecto: 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 - el número de hijos que se crearon al iniciar.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP max_requests
pm.max_solicitudes = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP request_slowlog_timeout
; Nota: el slowlog es obligatorio si request_slowlog_timeout está configurado
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Ralentizador de grep
; - 'Ralentizar'
; Nota: el slowlog es obligatorio si request_slowlog_timeout está configurado
slowlog = /alidata/log/php/$pool.log.slow
; volcado en el archivo 'slowlog'. Un valor de '0s' significa 'apagado'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Establece el descriptor de archivo abierto rlimit para el proceso maestro.
; rlimit_files = 1024
; Establece el límite máximo de tamaño del núcleo para el proceso maestro.
; rlimit_core = 0
; Establece el descriptor de archivo abierto rlimit.
; rlimit_files = 1024
; Establece el límite máximo de tamaño del núcleo.
; rlimit_core = 0
[root@old_server conf] #
 Propietario| Publicado en 16/1/2022 16:54:04 |
request_terminate_timeout = 10s

El valor por defecto es 0 segundos, lo que significa que el script PHP seguirá ejecutándose. De este modo, cuando todos los procesos php-cgi están ocupados, el servidor web Nginx+PHP ya no puede gestionar nuevas solicitudes PHP, y Nginx devolverá al usuario un "502 Bad Gateway". request_terminate_timeout = 30s pueden usarse
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com