Ocorreu um erro “FastCGI: falha ao conectar-se ao servidor” ocasional do PHP-FPM

2
Ubuntu 14.04.3 LTS
Apache 2.4.7
PHP 5.5.9

Eu mudei de mod_php para PHP-FPM há cerca de duas semanas. Tudo, na maior parte, está funcionando sem problemas. Exceto duas vezes, tive uma situação em que o apache / php não respondia. Uma reinicialização resolveria o problema, mas gostaria de saber por que isso está acontecendo. Aqui estão os logs de erros, são preenchidos com centenas do tipo de erro similar.

# /var/log/apache2/error.log
.
.
[Wed Dec 16 23:19:21.476641 2015] [fastcgi:error] [pid 32523] (104)Connection reset by peer: [client xx.xx.xx.xx:43676] FastCGI: comm with server "/usr/lib/cgi-bin/php5-fcgi" aborted: read failed
[Wed Dec 16 23:19:21.476866 2015] [fastcgi:error] [pid 32411] (2)No such file or directory: [client xx.xx.xx.xx:63082] FastCGI: failed to connect to server "/usr/lib/cgi-bin/php5-fcgi": connect() failed
[Wed Dec 16 23:19:21.477489 2015] [fastcgi:error] [pid 32527] (104)Connection reset by peer: [client xx.xx.xx.xx:49675] FastCGI: comm with server "/usr/lib/cgi-bin/php5-fcgi" aborted: read failed
[Wed Dec 16 23:19:21.478270 2015] [fastcgi:error] [pid 32548] (2)No such file or directory: [client xx.xx.xx.xx:59140] FastCGI: failed to connect to server "/usr/lib/cgi-bin/php5-fcgi": connect() failed
.
.

Configuração do Apache

# /etc/apache2/conf-available/php5-fpm.conf
<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization

    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory> 
</IfModule> 

PHP5-FPM Config (incluído o que eu acho que pode ser útil)

# /etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
.
.
user = www-data
group = www-data
.
.
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 1
pm.max_requests = 500
.
.
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
.
.

Conectando-se a soquetes

# lsof -U | grep php
php5-fpm  14373   www-data    0u  unix 0xffff8801ff42bb80      0t0   1721 /var/run/php5-fpm.sock
php5-fpm  17084   www-data    0u  unix 0xffff8801ff42bb80      0t0   1721 /var/run/php5-fpm.sock
php5-fpm  18544   www-data    0u  unix 0xffff8801ff42bb80      0t0   1721 /var/run/php5-fpm.sock
php5-fpm  18544   www-data    4u  unix 0xffff8800da1e7700      0t0 701371 /var/run/php5-fpm.sock
php5-fpm  18649   www-data    0u  unix 0xffff8801ff42bb80      0t0   1721 /var/run/php5-fpm.sock
php5-fpm  19672   www-data    0u  unix 0xffff8801ff42bb80      0t0   1721 /var/run/php5-fpm.sock

Por favor, deixe-me saber se há alguma outra informação necessária para ajudar a descobrir isso. Como afirmei, isso só aconteceu duas vezes agora. Obrigado

    
por Eko3alpha 17.12.2015 / 16:37

2 respostas

2

Não use um soquete para esse propósito. Eles bloqueiam demais para suportar até mesmo um site de carga média com muitos pedidos chegando. Use um soquete TCP para conectar o httpd ao php-fpm.

Consulte isto para obter instruções: link (veja a seção "soquete TCP (IP e porta)" abordagem ").

Você também não tem muitos funcionários configurados. Eu geralmente recomendo cerca de dois por núcleo de CPU disponível (assumindo que a maioria das solicitações da web levará 500 ms). Você pode fazer sua própria matemática com base no seu tempo médio de resposta. Se você precisar de mais funcionários para suportar sua carga, obtenha mais servidores.

    
por 18.12.2015 / 00:25
1

Eu consegui resolver os erros de conexão. Eu não tenho recursos suficientes alocados para o php-fpm. Eu aumentei a quantidade de trabalhadores (obrigado Joel), defini um limite de tempo limite (obrigado Froggiz) e configurei um valor de max_requests. A postagem a seguir explica em detalhes o problema que eu estava tendo.

link

Obrigado!

    
por 22.12.2015 / 17:51