apache com php fastcgi continua indo para baixo

3

Eu tenho um servidor apache2 configurado com MPM worker e php fast cgi. Ultimamente, os logs do apache têm me dito que o MaxClients está sendo acessado com frequência, mesmo que já esteja bem alto.

Meu servidor agora está em constante queda e vejo várias linhas como essa no log:

[Sun Mar 06 04:25:40 2011] [error] [client 50.16.83.115] FastCGI: comm with (dynamic) server "/var/local/fcgi/php-cgi-wrapper.fcgi" aborted: (first read) idle timeout (20 sec)
[Sun Mar 06 04:25:40 2011] [error] [client 50.16.83.115] FastCGI: incomplete headers (0 bytes) received from server "/var/local/fcgi/php-cgi-wrapper.fcgi"

Eu posso ver que meus processos php-cgi são bem grandes (cerca de 70mb em média).

Aqui está minha configuração do apache para o trabalhador do MPM: KeepAlive ON KeepAliveTimeout 2

<IfModule mpm_worker_module>
    StartServers         5
    MinSpareThreads      10
    MaxSpareThreads      10
    ThreadLimit          64
    ThreadsPerChild      10
    MaxClients           20
    MaxRequestsPerChild  2000
</IfModule>

Heres minha configuração do apache fastcgi:

<IfModule mod_fastcgi.c>
  # One shared PHP-managed fastcgi for all sites
  Alias /fcgi /var/local/fcgi
  # IMPORTANT: without this we get more than one instance
  # of our wrapper, which itself spawns 20 PHP processes, so
  # that would be Bad (tm)
  FastCgiConfig -idle-timeout 20 -maxClassProcesses 1
  <Directory /var/local/fcgi>
    # Use the + so we don't clobber other options that
    # may be needed. You might want FollowSymLinks here
    Options +ExecCGI
  </Directory>
  AddType application/x-httpd-php5 .php
  AddHandler fastcgi-script .fcgi
  Action application/x-httpd-php5 /fcgi/php-cgi-wrapper.fcgi
</IfModule>

Aqui está meu wrapper fastcgi:

#!/bin/sh
PHPRC="/etc/php5/apache2"
export PHPRC
PHP_FCGI_CHILDREN=8
export PHP_FCGI_CHILDREN

exec /usr/bin/php-cgi

Qualquer ajuda seria muito muito apreciada!

    
por Josh Nankin 06.03.2011 / 15:40

4 respostas

2

Eu não acho que a configuração do seu servidor esteja relacionada ao seu problema, mas vamos resolver isso primeiro: o mod_fastcgi irá cuidar de gerar processos PHP e somente alimentar um pedido de uma vez para cada processo (AFAIK, eu sou um usuário mod_fcgid ). Assim, é inútil pedir ao PHP para bifurcar outros processos, você preferiria ter PHP_FCGI_CHILDREN = 0 para desativar este recurso.

Lately the apache logs have been telling me that MaxClients is being reached frequently, even though it's already pretty high.

O seu MaxClients é 20, nos meus sites de MPM está no 5000-10,000 ballpark! Isso é muito baixo.

Tenha em mente que o MaxClients regula apenas o conjunto de processos do Apache, e o Apache é muito escalável para servir milhares de conexões simultâneas.

Você pode regular separadamente seu pool de processos FastCGI com opções mod_fastcgi. Eu só posso ajudar com uma sólida experiência em mod_fcgid, desculpe. Esse pool de processos tem, na maioria das vezes, um tamanho entre 1x e 4x o número de núcleos de CPU.

[Sun Mar 06 04:25:40 2011] [error] [client 50.16.83.115] FastCGI: comm with (dynamic) server "/var/local/fcgi/php-cgi-wrapper.fcgi" aborted: (first read) idle timeout (20 sec)

Seu aplicativo não pôde enviar um único byte em 20 segundos, o que é muito lento. Você terá que encontrar o gargalo. Como regra geral, se a média de carga é alta, há uma boa mudança na CPU ou no limite de E / S (depois, verifique o uso da CPU); Caso contrário, se a carga estiver baixa, verifique se há espera em recursos remotos (servidor de banco de dados, APIs de terceira parte e assim por diante).

    
por 07.10.2013 / 01:59
0

Seus scripts demoram mais de 20 segundos. Aumente o valor de tempo limite ocioso ou investigue por que eles estão demorando todo esse tempo (por exemplo, aguardando conexões DB).

    
por 07.03.2011 / 02:14
0

Tanto quanto eu posso dizer, houve um problema com uma das extensões que eu tinha instalado.

link

    
por 07.03.2011 / 18:15
0

Você pode resolver isso aumentando o número de PHP_FCGI_CHILDREN até que ele consuma toda a sua memória ou depure o problema, porque os scripts demoram muito para serem executados. Problemas comuns são: DB lento, solicitação externa lenta (com ondulação ou fopen).

    
por 25.12.2012 / 11:43