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
|