Parâmetros importantes do php-fpm.conf são explicados em detalhes
PID = run/php-fpm.pid #pid设置, recomenda-se ativar var/run/php-fpm.pid no diretório de instalação por padrão
error_log = log/php-fpm.log #错误日志, o padrão é var/log/php-fpm.log no diretório de instalação
log_level = aviso #错误级别. Os níveis disponíveis são: alerta, erro, aviso, aviso, depuração. Padrão: aviso.
emergency_restart_threshold = 60 emergency_restart_interval = 60s # indica que se o número de processos php-cgi com erros SIGSEGV ou SIGBUS exceder emergency_restart_threshold dentro do valor emergency_restart_interval, o php-fpm será reiniciado graciosamente. Essas duas opções geralmente continuam sendo o padrão.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Unidades disponíveis: s (segundos), m (minutos), h (horas) ou d (dias) Unidades padrão: s (segundos). Padrão: 0.
Daemonize = sim #后台执行fpm, o valor padrão é sim, e se quiser depurar, pode mudar para não. No FPM, diferentes configurações podem ser usadas para rodar múltiplos pools de processos. Essas configurações podem ser definidas individualmente para cada pool de processos.
ouça = 127.0.0.1:9000 #fpm监听端口, ou seja, o endereço processado pelo PHP em nginx, geralmente é o valor padrão. Os formatos disponíveis são: 'ip:port', 'port', '/path/to/unix/socket'. Cada pool de processos precisa ser configurado.
listen.backlog = -1 #backlog数, -1 significa ilimitado, determinado pelo sistema operacional, é só comentar esta linha. Referência: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP, defina qualquer um para não restringir IP; se quiser configurar o nginx de outros hosts para acessar esse processo FPM, precisa definir o endereço IP que pode ser acessado ao custo de escuta. O valor padrão é qualquer um. Cada endereço é separado por uma vírgula. Se não estiver configurado ou vazio, qualquer servidor pode solicitar uma conexão
ouça.proprietário = www listen.group = www modo de ouvir = 0666 #unix opção de configuração de soquete, se você usar TCP para acessar, pode comentar aqui.
usuário = www Grupo = www #启动进程的帐户和组
PM = #对于专用服务器 dinâmico, PM pode ser configurado como estático. #如何控制子进程, as opções são estáticas e dinâmicas. Se for selecionado estático, um número fixo de processos filhos é especificado por pm.max_filhos. Se a dinâmica for selecionada, ela é determinada pelos seguintes parâmetros: pm.max_filhos #, o número máximo de processos filhos pm.start_servers #, o número de processos na inicialização pm.min_spare_servers #, garanta um número mínimo de processos ociosos e crie um novo processo filho se o processo ocioso for menor que esse valor pm.max_spare_servers#, garanta o número máximo de processos ociosos; se o processo ocioso for maior que esse valor, isso será limpo
pm.max_solicitações = 1000 #设置每个子进程重生之前服务的请求数. Isso é muito útil para módulos de terceiros que podem ter vazamentos de memória. Se definido como '0', o pedido sempre é aceito. Equivalente a PHP_FCGI_MAX_REQUESTS variáveis de ambiente. Padrão: 0.
pm.status_path = /status #FPM状态页面的网址. Se você não tiver as configurações, não pode acessar a página de status. Padrão: nenhum. O monitoramento de Munin será utilizado
ping.path = /ping #FPM监控页面的ping网址. Se você não tiver as configurações, não consegue acessar a página de ping. Esta página é usada para detectar externamente se o FPM está ativo e pode responder a solicitações. Note que deve começar com uma barra (/).
ping.resposta = pong #用于定义ping请求的返回相应. Retorna texto em formato texto/simples para HTTP 200. Padrão: pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Essa opção pode ser útil para scripts que não são abortados por algum motivo especial php.ini 'max_execution_time' nas configurações. Definido para '0' significa 'Desligado'. Você pode tentar mudar essa opção quando erros 502 forem encontrados com frequência.
request_slowlog_timeout = 10s #当一个请求该设置的超时时间后, as informações correspondentes da pilha de chamadas PHP serão escritas no log lento. Definido para '0' significa 'Desligado'
slowlog = log/$pool.log.slow #慢请求的记录日志, use com request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Valor padrão: O handle aberto padrão é 1024, que pode ser visualizado com ulimit -n e modificado por ulimit -n 2048.
rlimit_core = 0 #设置核心rlimit最大限制值. Valores disponíveis: 'ilimitado', 0 ou inteiros positivos. Valor padrão: Valor definido pelo sistema.
chroot = #启动时的Chroot目录. O diretório definido precisa ser um caminho absoluto. Se não houver configuração, o chroot não é usado.
chdir = #设置启动目录, o Chdir é enviado automaticamente para esse diretório quando ele inicia. O diretório definido precisa ser um caminho absoluto. Padrão: diretório atual, ou/diretório (quando chrootado)
catch_workers_output = sim #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Se não estiver definido, stdout e stderr serão redirecionados para /dev/null de acordo com as regras do FastCGI. Padrão: Nulo.
Ajuste de parâmetros PHP-FPM
PM = dinâmica; Indica qual método de gerenciamento de quantidade de processo é utilizado
Dinâmico significa que o número de processos PHP-FPM é dinâmico, o número é especificado pm.start_servers no início, se houver mais solicitações, ele aumentará automaticamente para garantir que o número de processos ociosos não seja menor que pm.min_spare_servers, e se o número de processos for grande, também será limpo para garantir que o número de processos excedentes não seja superior a pm.max_spare_servers
estático significa que o número de processos em php-fpm é estático, e o número de processos é sempre o número especificado por pm.max_filhos, sem aumentar nem diminuir
pm.max_crianças = 300; O número de processos php-fpm que são habilitados no modo estático pm.start_servers = 20; O número de processos iniciais php-fpm em modo dinâmico pm.min_spare_servers = 5; O número mínimo de processos php-fpm no modo dinâmico pm.max_servidores_de_reserva = 35; O número máximo de processos php-fpm no modo dinâmico
Se pm for estático, então apenas o parâmetro pm.max_children é válido. O sistema abrirá um número definido de processos php-fpm
Se o PM for dinâmico, então o parâmetro pm.max_children é inválido, e os três últimos parâmetros entram em vigor. O sistema iniciará pm.start_servers processos php-fpm no início da execução php-fpm e, em seguida, ajustará dinamicamente o número de processos php-fpm entre pm.min_spare_servers e pm.max_spare_servers de acordo com as necessidades do sistema
Então, qual método de PM é melhor para escolher no nosso servidor? Na verdade, assim como o Apache, executar programas PHP terá mais ou menos problemas de vazamento de memória após a execução. É por isso que um processo php-fpm ocupa apenas cerca de 3M de memória no início, e após rodar por um tempo, ele sobe para 20-30M.
Para servidores com grande memória (como 8G ou mais), é na verdade mais apropriado especificar max_children estática, pois isso não requer controle adicional de processos e melhora a eficiência. Como a troca frequente de processos php-fpm também atrasará o tempo, será melhor ativar efeitos estáticos quando a memória estiver grande o suficiente. A quantidade também pode ser obtida de acordo com a memória/30M, por exemplo, 8GB de memória pode ser ajustada para 100, então a memória consumida pelo php-fpm pode ser controlada em 2G-3G. Se a memória for um pouco menor, como 1G, então especificar o número de processos estáticos é mais propício à estabilidade do servidor. Isso garante que o php-fpm receba apenas memória suficiente e aloque uma pequena quantidade de memória para outras aplicações, o que fará com que o sistema funcione de forma mais suave.
Para um servidor com memória pequena, como um VPS com 256M de memória, mesmo que seja calculado de acordo com uma quantidade de memória de 20M, 10 processos php-CGI consumirão 200M de memória, então o travamento do sistema deve ser normal. Portanto, você deve tentar controlar o número de processos php-fpm e, após esclarecer aproximadamente a memória ocupada por outras aplicações, especificar um número estático pequeno para isso, o que tornará o sistema mais estável. Ou use o método dinâmico, porque o método dinâmico encerra o processo redundante e recupera parte da memória, então é recomendado usá-lo em servidores ou VPS com menos memória. A quantidade máxima específica é obtida com base na memória/20M. Por exemplo, para um VPS 512M, recomenda-se definir pm.max_spare_servers em 20. Quanto ao pm.min_spare_servers, recomenda-se configurá-lo de acordo com a carga do servidor, e o valor mais apropriado fica entre 5~10.
200 em um servidor com memória 4G é bom (minha máquina de teste 1G, 64 é a melhor, é recomendado usar teste de estresse para obter o melhor custo-benefício)
pm.max_solicitações = 10240;
O maior problema no processo de configuração nginx php-fpm é o problema do vazamento interno: a carga no servidor não é grande, mas a ocupação de memória aumenta rapidamente, consumindo rapidamente a memória e começando a consumir a partição swap, e o sistema trava rapidamente! De fato, segundo a introdução oficial, o php-cgi não possui vazamento de memória, e o php-cgi recupera memória após cada requisição ser concluída, mas não é liberado para o sistema operacional, o que fará com que uma grande quantidade de memória seja ocupada pelo php-cgi.
A solução oficial é diminuir o valor do PHP_FCGI_MAX_REQUESTS, se o php-fpm for usado, o php-fpm.conf correspondente é o max_requests, o que significa quantas solicitações serão enviadas para reiniciar a thread, precisamos diminuir esse valor adequadamente, para que o php-fpm libere automaticamente memória, não a maior parte dos 51200 na Internet, etc., na verdade, há outro valor relacionado a isso max_ Filhos, é assim quantos processos serão estabelecidos a cada vez que PHPs-FPM, para que o consumo real de memória seja max_children*max_requests* Cada requisição usa memória, de acordo com isso podemos estimar o uso de memória, então não há necessidade de escrever scripts para matar.
request_terminate_timeout = 30;
Tempo máximo de execução, configurável em php.ini (max_execution_time)
request_slowlog_timeout = 2; Ligue os troncos lentos slowlog = log/$pool.log.slow; Caminho lento do tronco
rlimit_files = 1024; Adicionado um limite no php-fpm para descritores de arquivo abertos
|