Назад | Перейти на главную страницу

Периодическая ошибка PHP-FPM «FastCGI: не удалось подключиться к серверу»

Ubuntu 14.04.3 LTS
Apache 2.4.7
PHP 5.5.9

Я перешел с mod_php на PHP-FPM около двух недель назад. По большей части все идет гладко. За исключением двух случаев, когда у меня была ситуация, когда apache / php переставал отвечать. Перезапуск решит проблему, однако я хотел бы знать, почему это происходит. Вот журналы ошибок, они заполнены сотнями ошибок аналогичного типа.

# /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
.
.

Конфигурация 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 (включая то, что, на мой взгляд, может быть полезно)

# /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
.
.

Подключение к розеткам

# 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

Пожалуйста, дайте мне знать, если есть какая-либо другая информация, необходимая, чтобы помочь в этом разобраться. Как я уже сказал, это случилось только дважды. Спасибо

Не используйте для этой цели розетку. Они блокируют слишком много, чтобы поддерживать даже сайт средней загрузки с большим количеством входящих запросов. Вместо этого используйте сокет TCP для подключения httpd к php-fpm.

Обратитесь к этому за инструкциями: https://wiki.apache.org/httpd/PHP-FPM (см. раздел «Подход к TCP-сокетам (IP и порт)»).

У вас также не очень много рабочих. Обычно я рекомендую около двух на доступное ядро ​​ЦП (при условии, что большинство веб-запросов займут 500 мс). Вы можете сделать свои собственные вычисления на основе среднего времени ответа. Если вам нужно больше рабочих для поддержки вашей нагрузки, приобретите больше серверов.

Мне удалось исправить ошибки подключения. У меня не хватило ресурсов, выделенных на php-fpm. Я увеличил количество рабочих (спасибо, Джоэл), установил предел времени ожидания (спасибо Froggiz) и установил значение max_requests. В следующем сообщении подробно объясняется проблема, с которой я столкнулся.

https://stackoverflow.com/questions/18009479/random-php-fastcgi-connection-reset-by-peer-incomplete-headers

Спасибо!