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

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

После 6 часов отладки - я бросаю это дело :|

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

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

Сегодня, ни с того ни с сего, 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-server). Так что если вам кажется, что это слишком долго, чтобы помочь мне, пожалуйста, хотя бы намекните.

Заранее спасибо за помощь.

-Рахул

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

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

решение1

Я нашел ответ в своем сообщении на форуме 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

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

решение2

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

внесите следующие изменения в /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 перезапустить

решение3

Если вы используете PHP 5.3, увеличьте backlog.

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

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

решение4

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

исправить:

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

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

Связанный контент