PHP5-FPM + Nginx: Modos Static x Dynamic x On Demand

Visualizando 15 posts - 1 até 15 (de 17 do total)
  • Autor
    Posts
  • #10852
    Luis FatorBinario
    Administrador

    Este post complementa o artigo NginX: Otimizando o Desempenho. Veja as diferenças entre as possíveis configurações do PHP-FPM Process Manager e entenda porque alterá-las.

    Em meus tutoriais eu sempre escrevo sobre o NginX e de como ele é leve em comparação ao Apache, na maioria dos sites a configuração básica apresentada + a otimização já é suficiente para rodar alto volume de tráfego, mas vamos um passo adiante e melhorar isso.

    O PHP-FPM Process Manager suporta 3 tipos de configurações: Static, Dynamic e On Demand. Segue uma breve explicação de cada uma:

    Static: Pode ser configurado para rodar um número fixo de requisições de páginas impondo um limite, quando este limite é ultrapassado o NginX responde com erros 502 ou 504. A opção Static tem a vantagem de ser a mais rápida pois a memória é pré-alocada para “N” requisições, porém para sites com muitos acessos isso pode ser um problema pois demandaria muita memória RAM reservada, que nem sempre é usada.

    Dynamic: Neste modo um número limite de requisições é configurado, e quando este limite é atingido o processador procura por processos inativos servindo as páginas a partir deles (respawning). Essa opção é intermediária e configurada por padrão na maioria dos servidores que usam PHP-FPM. As páginas serão servidas com demora de alguns milisegundos em comparação ao modo Static, mas o uso da memória RAM é menor uma vez que os processos são recicláveis pois podemos configurar com um número bem mais reduzido de “requests”.

    On Demand: Este modo pode ser ativado a partir da versão 5.3.9 do PHP sendo a melhor opção para servidores que servem alta demanda de páginas. Após ativado e configurado para “N” requisições ele criará novos processos quando necessário e destruirá os mesmos quando não estiverem mais em uso. A velocidade em que as páginas serão servidas é ainda mais lenta que no modo Dynamic por causa da reciclagem constante, porém nota-se que estamos falando em milisegundos aqui. O uso de memória RAM é bem reduzido mesmo com muitos acessos.

    Além de configurar o modo de operação temos que prestar atenção em linhas adicionais que irão auxiliar na demanda.

    Segue abaixo um exemplo de configuração. No ISPConfig 3 pode-se acessar estes parâmetros facilmente em Sites / Selecione um Site na Lista / Aba Opções / PHP-FPM Process Manager.

    > PHP-FPM Process Manager: ondemand (Note o aviso sobre a versão do PHP)

    > PHP-FPM pm.max_children: 20 (Número máximo de processos-filho. Em um VPS com 512Mb de RAM este número é um bom começo, pode-se monitorar mensagens de erro do PHP-FPM demandando que este número seja aumentado)

    > PHP-FPM pm.process_idle_timeout: 10s (O valor de 10 segundos é o suficiente. Este é o tempo em que o processo será reciclado/destruido caso o usuário esteja ausente)

    > PHP-FPM pm.max_requests: 500 (Isso ajudará em problemas de erros de memória. A cada 500 requisições o PHP reiniciará a pilha de processos prevenindo isso. A reciclagem da pilha demora em torno de uns 9 segundos)

    Para escrever este guia levei em consideração mensagens de erros e avisos gravadas nos arquivos de log do servidor. Veja abaixo algumas das mensagens mais comuns que são encontradas no arquivo /var/log/php5-fpm.log:

    • WARNING: [pool web1] server reached max_children setting (nn), consider raising it
    • NOTICE: [pool web1] child nnnnn exited with code 0 after 549.866105 seconds from start
    • WARNING: [pool web1] child nnnnn exited on signal 11 (SIGSEGV) after 0.649484 seconds from start

     

    *As configurações acima são recomendadas para o bom funcionamento do VPS e foram testadas nos servidores do Fator Binário.

    #11018
    herculesnetwork
    Participante

    Demais : )  tambem opto por “perder” mili segundos em troca do mais trafego suportado .. On demand 🙂 segui o guia anterior… mas agora como faço pra seguir esse passo aqui sem painel adminstrativo? só uso o terminal-gnome para gerenciar meus conteudos :'(

    seria aqui, onde tá o arquivo pra editar sem ser via painel??..

     pm = dynamic
     pm.max_children = 256
     ; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
     pm.start_servers = 8
     pm.min_spare_servers = 8
     pm.max_spare_servers = 16
     pm.max_requests = 150
     pequei da web.. nao sei onde ficam isso. fuçando no meio do forums dos gringos vi uma galera reclamando
     que o site caia muito antes de usarem as dicas pra mudaram on demand (sob demanda)! tambem quero.
     Como? onde faço isso?!! nao sei onde editar process manager
    
      
    Nginx and PHP-FPM Configuration and Optimizing Tips and Tricks
    os gringo aqui falam bem das config aqui ó.
    #11020
    Luis FatorBinario
    Administrador

    Como eu te disse nas outras respostas, a maioria dos tutoriais seguem a partir do ISPConfig com Debian. Não fiz tutorial para configurações sem o painel neste caso.

    #11022
    herculesnetwork
    Participante

    Vish!!! eu acho que é isso aqui:

    nano /etc/php5/fpm/pool.d/www.conf

    check se vc encontra algo que seja modifica o modo de gerenciar processos do php. to perdido.

    http://www.if-not-true-then-false.com/2011/nginx-and-php-fpm-configuration-and-optimizing-tips-and-tricks/  nesse link tem uns arquivos que não existem nos diretorio que os caras apontam… quer dizer que eles.. da uma olhadinha depois.

    dei um: find /etc -name php-fpm.conf       /// e encontrei esse arquivo abaivo… quase tudo indica ser ele.
    /etc/php5/fpm/php-fpm.conf

    meu instinto diz que o arquivo de configuração é esse aqui.. encontrei umas parada nele que tão comentadas e outras não e on demand tão no meio … olha pa noíz vc q manja desses paranaues de servidores.

    #11050
    thiago
    Participante

    Como faço para saber a versão do PHP no meu servidor digital ocean?

    #11051
    Luis FatorBinario
    Administrador

    thiago comentou no post #11050:

    Como faço para saber a versão do PHP no meu servidor digital ocean?

    Com o comando:

    > php -v

    Ou crie um arquivo .php com o seguinte conteúdo:

    #11052
    thiago
    Participante

    Obrigado

    Outra coisa Luis

    você acha que essas configurações são validas https://www.youtube.com/watch?v=qcLM01BAt-U

    no meu caso eu uso nginx, mas a maioria desses plugin que ele falou é para apache, o que será que ajuda a melhorar pontuação no pagespeed insights

    obrigado e parabéns pelo seu trabalho

    #11053
    Luis FatorBinario
    Administrador

    Você tem que Otimizar o NginX com aquele artigo que publiquei. Já é o suficiente.

    #11054
    thiago
    Participante

    Ok obrigado =)

    Abraços

    #12129
    charlesab
    Participante

    Luis como posso atualizar a versão do php utilizado?

    Obrigado

    #12130
    Luis FatorBinario
    Administrador

    charlesab comentou no post #12129:

    Luis como posso atualizar a versão do php utilizado?

    Obrigado

     

    Olha só Charles, em qualquer SO Linux você pode digitar os comandos apt-get update e em seguida apt-get upgrade que irá atualizar “oficialmente” todos os pacotes. Eles serão atualizados para a última versão estável no repositório.

    Porém se você quiser uma versão diferente da oficial terá que buscar no Backports (Debian), nos repositórios experimentais ou no site do mantenedor do pacote. Nestes casos os procedimentos serão diferentes e um pouco complicados (consulte dependency hell).

    O PHP tem ligações com vários outros pacotes e apps no servidor, então tentar atualizá-lo individualmente pode causar sérias instabilidades.

    A melhor dica que posso te dar é: execute o procedimento em um servidor de testes primeiro, e mesmo após testado tire um snapshot do VPS em produção antes de executar qualquer comando crítico ao sistema, assim se algo der errado terá como voltar o backup.

     

    #12247
    marcilioqsj
    Participante

    Fala Luís, aconteceu uma situação curiosa hoje. Tenho um servidor ISPConfig que montei seguindo o seu tutorial. Hoje eu e um amigo estávamos mexendo em uma nova instalação wordpress dentro dele quando do nada o servidor parou de responder, dando erro 502, e desde então estamos sem acesso.  No log do PHP5-FPM foi possível extrair o seguinte:

    [01-May-2016 07:35:05] NOTICE: error log file re-opened
    [03-May-2016 19:59:19] WARNING: [pool web5] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 8 total children
    [03-May-2016 19:59:20] WARNING: [pool web5] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 9 total children
    [03-May-2016 19:59:21] WARNING: [pool web5] server reached pm.max_children setting (10), consider raising it
    [03-May-2016 20:00:05] WARNING: [pool web7] server reached pm.max_children setting (10), consider raising it
    [05-May-2016 16:48:39] WARNING: [pool web5] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 8 total children
    [05-May-2016 16:48:40] WARNING: [pool web5] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 9 total children
    [05-May-2016 16:48:41] WARNING: [pool web5] server reached pm.max_children setting (10), consider raising it
    [05-May-2016 17:50:37] WARNING: [pool web5] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 8 total children
    [05-May-2016 17:50:38] WARNING: [pool web5] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 9 total children
    [05-May-2016 17:50:39] WARNING: [pool web5] server reached pm.max_children setting (10), consider raising it
    [06-May-2016 19:15:59] WARNING: [pool web5] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 8 total children
    [06-May-2016 19:16:00] WARNING: [pool web5] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 9 total children
    [06-May-2016 19:16:01] WARNING: [pool web5] server reached pm.max_children setting (10), consider raising it
    [07-May-2016 16:49:38] WARNING: [pool web11] server reached pm.max_children setting (10), consider raising it
    [07-May-2016 16:53:49] WARNING: [pool web4] server reached pm.max_children setting (10), consider raising it
    [07-May-2016 17:12:45] WARNING: [pool web5] server reached pm.max_children setting (10), consider raising it
    [07-May-2016 17:17:23] NOTICE: Terminating …
    [07-May-2016 17:17:23] NOTICE: exiting, bye-bye!

    Alterei os valores pm.max_children sem resultado. Tem como me ajudar?

    #12248
    marcilioqsj
    Participante

    Fala Luís! Consegui resolver o problema do erro 502. Removi o PHP-FPM e instalei de novo, os sites voltaram a funcionar. Porém o painel ISPConfig parou, está me apresentando o seguinte erro:

    <b>Warning</b>: mysqli::mysqli(): Headers and client library minor version mismatch. Headers:50544 Library:50625 in <b>/usr/local/ispconfig/interface/lib/classes/db_mysql.inc.php</b> on line <b>61

    <b>Warning</b>: mysqli::mysqli(): Headers and client library minor version mismatch. Headers:50544 Library:50625 in <b>/usr/local/ispconfig/interface/lib/classes/db_mysql.inc.php</b> on line <b>61</b>
    </b>

    Parece que é algo relacionado ao banco de dados, pois como reinstalei o PHP, deve ter sobrescrito alguma informação do ISPConfig. Tem como me ajudar?

    #12249
    Luis FatorBinario
    Administrador

    Você não deveria ter reinstalado o PHP dessa maneira que fez, normalmente isso quebra todas as configurações. Nunca faça esse tipo de ação em servidor em produção.

    As mensagens de max_children são normais e aparecem conforme você altera os limites no ISPConfig. Se estava tendo muitos logs disso é porque o seu servidor estava sob ataque DDoS, e provavelmente foi isso que aconteceu, você estava sob DDoS dando os erros 502 ae tentou resolver reinstalando, o que foi um erro.

    Era só ter reiniciado os serviços ou o servidor que parava.

    Se você tiver um backup do VPS como sempre falo pra ativar será bem mais fácil de consertar isso.

    #12250
    marcilioqsj
    Participante

    Mas eu tentei reiniciar os serviços, desliguei o servidor, liguei de novo. Nginx reiniciava tranquilamente, enquanto o PHP-FPM não respondia a nenhum comando. Eu fiz um snapshot do Digital Ocean antes de tomar essa atitude, vou recuperar então e volto a postar o erro aqui.

Visualizando 15 posts - 1 até 15 (de 17 do total)
  • Você deve fazer login para responder a este tópico.

©2014-2020 Fator Binário - Todos os direitos reservados

Fazer login com suas credenciais

Esqueceu sua senha?