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

Ошибка Nginx + php-fpm «504 Gateway Time-out» при практически нулевой нагрузке (на тестовом сервере)

После 6-часовой отладки - я отказываюсь от этого: |

У нас есть nginx + php-fpm + mysql в локальной сети с почти 100 wordpress (созданы и используются разными дизайнерами / разработчиками, все работают над тестовой настройкой wordpres)

Мы давно используем nginx без каких-либо проблем.

Сегодня внезапно - nginx неожиданно начал возвращать "504 Gateway Time-out" ...

Я проверил журнал ошибок nginx для виртуального хоста ...

2010/09/06 21:24:24 [error] 12909#0: *349 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *349 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *443 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:12 [error] 12909#0: *443 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:08:32 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:33 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:44 [error] 12909#0: *1313 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:53 [error] 12909#0: *1313 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"

Когда я запустил php-fpm на порту 9000 в режиме TCP, я запустил netstat | grep 9000 и заметил кое-что необычное ... (Вставка частичного вывода сюда для удобства чтения)

tcp        9      0 localhost:9000          localhost:36094         CLOSE_WAIT  14269/php5-fpm  
tcp        0      0 localhost:46664         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36135         CLOSE_WAIT  -               
tcp     1257      0 localhost:9000          localhost:36125         CLOSE_WAIT  -               
tcp        9      0 localhost:9000          localhost:36102         CLOSE_WAIT  14268/php5-fpm  
tcp        0      0 localhost:46662         localhost:9000          FIN_WAIT2   -               
tcp      745      0 localhost:9000          localhost:46644         CLOSE_WAIT  -               
tcp        0      0 localhost:46658         localhost:9000          FIN_WAIT2   -               
tcp     1265      0 localhost:9000          localhost:46607         CLOSE_WAIT  -               
tcp        0      0 localhost:46672         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1257      0 localhost:9000          localhost:36119         CLOSE_WAIT  -               
tcp     1265      0 localhost:9000          localhost:46613         CLOSE_WAIT  -               
tcp        0      0 localhost:46646         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36137         CLOSE_WAIT  -               
tcp        0      0 localhost:46670         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1265      0 localhost:9000          localhost:46619         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46668         ESTABLISHED -               
tcp        0      0 localhost:46648         localhost:9000          FIN_WAIT2   -               
tcp     1336      0 localhost:9000          localhost:46670         ESTABLISHED -               
tcp        9      0 localhost:9000          localhost:36108         CLOSE_WAIT  14274/php5-fpm  
tcp     1336      0 localhost:9000          localhost:46684         ESTABLISHED -               
tcp        0      0 localhost:46674         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1336      0 localhost:9000          localhost:46666         ESTABLISHED -               
tcp     1257      0 localhost:9000          localhost:46648         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46678         ESTABLISHED -               
tcp        0      0 localhost:46668         localhost:9000          ESTABLISHED 12909/nginx: wo             

Существует множество пар «CLOSE_WAIT» и «FIN_WAIT2», как показано ниже (в выходных данных выше):

tcp     1337      0 localhost:9000          localhost:46680         CLOSE_WAIT  -               
tcp        0      0 localhost:46680         localhost:9000          FIN_WAIT2   -

Обратите внимание на порт 46680 выше.

Я включил журнал ошибок медленных запросов mysql, но это не сработало.

На данный момент перезапуск php5-fpm каждую минуту через cronjob (см. Команду ниже), чтобы все работало «гладко», но я ненавижу пэчворк и хочу решить эту проблему ...

1 * * * * service php5-fpm restart > /dev/null

Я много искал в Google - без помощи. Как уже упоминалось, это тестовый сервер в локальной сети, загрузка ЦП никогда не превышает 0,10, а использование памяти также ниже 25% (в системе установлено 2 ГБ ОЗУ и установлен ubuntu-сервер), поэтому, если вы находите, что это сбивает меня с толку, чтобы помочь мне, пожалуйста хоть намекни.

Заранее благодарим за помощь.

-Рахул

(примечание - это репост - http://forum.nginx.org/read.php?11,127694)

Обновление: я нашел ответ, который размещен ниже.

Я нашел ответ на свое сообщение на форуме nginx - http://forum.nginx.org/read.php?2,127854

В моем случае ответ - установить:

request_terminate_timeout=30s

в конфигурации php-fpm (обычно /etc/php5/fpm/php-fpm.conf)

Обратите внимание, вы также можете использовать значения, отличные от 30.

Я использовал его для соответствия моей стоимости в основном php.ini файл, который:

max_execution_time = 30

Спасибо всем. :-)

Вот как это решило мою проблему:

внесите следующие изменения в /etc/nginx/nginx.conf в разделе http {

proxy_connect_timeout  600s;
proxy_send_timeout  600s;
proxy_read_timeout  600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;

а затем перезапустите nginx

/etc/init.d/nginx перезапуск

Если вы используете php 5.3, увеличьте отставание.

Если вы используете php 5.2, выполните резервное копирование патча, чтобы увеличить размер невыполненной работы со 128.

Кроме того, используйте сокет unix, а не сокет TCP. unix: /tmp/php5-cgi.sock (или соответствующий путь)

Большое спасибо

request_terminate_timeout = 30 с

У меня отлично работает

но мне пришлось вставить строку в этот файл: «/etc/php5/fpm/pool.d/www.conf», то есть в «Рабочую секцию».

PHP 5.3.21-1 - Wordpress 3.5.1

http://php-fpm.org/wiki/Configuration_File

в моем случае (то же сообщение об ошибке nginx) некоторые проблемные сценарии php не заканчиваются для выполнения и чего-то ждут, в результате чего nginx больше не может выбирать детей php5-fpm.

исправить:

  1. добавить ограничение времени выполнения, другие упоминали это в этом сообщении. request_terminate_timeout=30s
  2. поднять количество детей. и все работало как шарм. pm.max_spare_servers=16 pm.min_spare_servers=2

теперь все работало как шарм.

Это также может помочь людям:

В зависимости от вашей настройки вы должны посмотреть параметры конфигурации fastcgi, а также php ... в моем случае (я использую apache2 + php5-fpm), а время max_execution также зависит от того, как долго модуль fastcgi ждет ответа ( -idle-timeout) ...

http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer

У меня была такая же проблема, и я решил ее, полностью удалив Apache:

yum remove httpd

После этого я рекомендую перезапустить PHP и NGINX:

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

Для меня такая же проблема возникла после удаления rabbitmq с сервера. Ничего из вышеперечисленного не помогло, переустановка всех модулей php5 решила проблему. На этом сервере у меня был Debian 8.2. Надежда будет кому-то полезна.

В нашем случае проблема заключалась в том, что php-fpm не мог открыть сеанс в общем ресурсе NFS, похоже, что один из веб-узлов заблокировал каталог, после перезапуска NFS и разрешил доступ к нему только 1 узлу, проблема была решена, Слава Богу

Вы всегда должны проверять свои журналы php-fpm, в моем случае местоположение было по адресу / var / opt / remi / php72 / журнал / php-fpm

вам также следует включить журналы медленных сценариев для лучшей отладки и проверить файл www-slow.log, расположенный в каталоге журналов

чтобы убедиться, что slowlog работает, убедитесь, что следующие настройки присутствуют в www.conf

slowlog = /var/opt/remi/php72/log/php-fpm/www-slow.log

request_slowlog_timeout = 5s

это должно регистрировать любой скрипт, который превышает 5 секунд, и регистрирует местоположение в коде php, которое вызывает проблему, в /var/opt/remi/php72/log/php-fpm/www-slow.log, вы можете изменить путь для удовлетворения ваше окружение