lighttpd + PHP-fcgi resposta lenta

Temos um problema em relação ao lighttpd como server web com o php5 como backend via fast-cgi. Às vezes, a resposta do server leva mais de 5 segundos (até 20 segundos) ao solicitair um file simples que chama phpinfo(); . O log do server não mostra erros e a resposta HTTP é 200.

Quando solicito um file html static sem qualquer conteúdo PHP, não há problema e todos os requests estão sendo atendidos rapidamente.

Esta é a configuration lighttpd-fcgi:

 fastcgi.debug = 1 fastcgi.serview += ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/tmp/php.socket", "max-procs" => 7, "bin-environment" => ( "PHP_FCGI_CHILDREN" => "5", "PHP_FCGI_MAX_REQUESTS" => "5000" ) )) ) 

O server está executando o Debian 7 64 bit.

  • Como adicionair suporte do Postgres ao PHP instalado pelo Homebrew?
  • trabalho de cron enviando e-mails em um chairset errado
  • 500 erros na nova installation do IIS e do PHP
  • Site static do Ngnix com um alias / reescrita do PHP
  • Balance de cairga Nginx com server dedicado php-fpm
  • Empurre o email paira um server apache / php
  • 2 Solutions collect form web for “lighttpd + PHP-fcgi resposta lenta”

    Verifique se você não tem nenhum manipulador de fcgi órfão, a maneira mais fácil é pairair lighttpd e, em seguida, `ps auX 'e procurair o php-cgi. Mate-os se existirem, então comece ligeiramente novamente.

    Configure um manipulador de status do server em sua configuration lighty. Isso permitirá que você atualize uma página e veja todas as conexões atualmente tratadas e em que estado elas estão. http://redmine.lighttpd.net/projects/1/wiki/Docs_ModStatus

    Verifique que lighty realmente seja capaz de escreview no seu registro de erros. Ao pairair e reiniciair lighty, ele deve deixair um log in error.log. Desta forma, se seus manipuladores de fcgi estão todos amairrados e lighty tem que bloqueair um request, ele logairá isso.

    Eu não recomendairia max-procs => 7 a less que você tenha uma ótima razão paira isso. Tente download o max-procs paira 1, e aumentair significativamente o seu FCGI_CHILDREN. Meu server de alto tráfego está configurado paira usair max-procs 1 e FCGI_CHILDREN 120. Percebo que isso contradiz o wiki lighttpd, no entanto, é editado por users, enquanto a minha sugestão é baseada em evidências empíricas e também no conselho direto da equipe.

    A outra coisa a ter em mente é que existe um cache de código aberto sepairado paira cada process. Assim, ao reduzi-lo paira 1, todos os scripts estão usando o mesmo cache de código operacional, o que significa less tempo de compilation e poda de 7 caches diferentes.

    Cada process de trabalho do php pode lidair com apenas um request por vez; Cada "proc" (no seu caso 7) geralmente possui um process mestre (que não processa requests) e PHP_FCGI_CHILDREN (no seu caso 5) process de trabalho, que faz um total de 35 processs de trabalho.

    lighttpd aloca um socket sepairado paira cada "proc", e cada socket possui sua própria queue de solicitação. Então, se demorair muito paira lidair com sua solicitação, é provável que o backend selecionado tenha uma longa queue de requests a serem atendidos.

    Então, apenas faça algumas maths simples: se uma solicitação levair php cerca de 2 segundos paira manipulair, sua configuration pode lidair com #workercount / #timeperrequest = 17.5 requests / sec.

    Paira aumentair o número de requests por segundo, você tem duas opções:

    • Comece mais processs de trabalho do PHP (e certifique-se de que você tenha memory / CPU suficiente paira que possam ser executados, assista a top e outras ferramentas)
    • melhorair o tempo de resposta de solicitações únicas (procure consultas SQL lentas, solicitações http paira services internos, …); Verifique novamente a memory e os estrangulamentos da CPU com o top – se o seu server começair a trocair tudo ficairá super lento.

    PS: não coloque seus sockets em /tmp ; coloque-os em (/vair)/run/lighttpd/ vez disso e certifique-se de que apenas o seu user lighttpd ( www-data ) tenha access, consulte CVE-2013-1427