Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 11218|Resposta: 4

Configuração e ajuste dos parâmetros PHP-FPM

[Copiar link]
Publicado em 26/07/2017 09:20:54 | | |
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





Anterior:Alibaba Cloud SLB análise de falha no balanceamento de carga HTTP de verificação de saúde
Próximo:Verificação de arquivos DZ x3.4 Arquivos faltando
 Senhorio| Publicado em 28/11/2021 13:42:00 |
[Prática] Verifique informações de status do php-fpm pelo Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Senhorio| Publicado em 19/12/2021 10:48:43 |
 Senhorio| Publicado em 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 - o número máximo de filhos em 'idle'
; Valor padrão: 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 - o número mínimo de crianças em 'ocioso'
; Valor padrão: 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 - o número de filhos criados na inicialização.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP max_requests
pm.max_solicitações = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP request_slowlog_timeout
; Nota: o slowlog é obrigatório se request_slowlog_timeout estiver ativado
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep Slowlog
; - 'slowlog'
; Nota: o slowlog é obrigatório se request_slowlog_timeout estiver ativado
slowlog = /alidata/log/php/$pool.log.slow
; Despejado no arquivo 'slowlog'. Um valor de '0s' significa 'desligado'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Defina o descriptor de arquivo aberto rlimit para o processo mestre.
; rlimit_files = 1024
; Defina o limite máximo de núcleo para o processo mestre.
; rlimit_core = 0
; Defina o descriptor de arquivo aberto rlimit.
; rlimit_files = 1024
; Defina o limite máximo do núcleo.
; rlimit_core = 0
[root@old_server conf] #
 Senhorio| Publicado em 16/01/2022 16:54:04 |
request_terminate_timeout = 10s

O valor padrão é 0 segundos, o que significa que o script PHP continuará a ser executado. Dessa forma, quando todos os processos php-cgi estiverem ocupados, o servidor web Nginx+PHP não consegue mais lidar com novas requisições PHP, e o Nginx retornará um "502 Bad Gateway" ao usuário. request_terminate_timeout = 30s podem ser usados
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com