.png)
После 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.
исправить:
- добавьте ограничение по времени выполнения, о котором упоминалось в этом посте.
request_terminate_timeout=30s
- увеличил количество детей. и все заработало как по маслу.
pm.max_spare_servers=16
pm.min_spare_servers=2
теперь все работало как по маслу.