Re: nginx (Windows XP) + php-cgi.exe - одновременно обрабатывает только один запрос - остальные ждут

Sergey Shepelev temotor на gmail.com
Ср Июн 2 11:41:44 MSD 2010


2010/6/1 iWarior <nginx-forum at nginx.us>:
> [i]По поводу количества процессов: скорее хватит 20-30 (и не забываем кешировать ответы бекендов), хотя, конечно, это сильно зависит от
> нагрузки. На linux/freebsd значительная часть памяти у них всех будет общая. Что ещё вас смущает в количестве? На windows да, это мало пригодно. Там нужно использовать потоки, и опять же, память будет общая.[/i]
>
> Это всё замечательно, НО: на linux/freebsd nginx конфигурируется точно также как и на windows - fastcgi_pass ссылается или на [u]один[/u] хост:порт или на [u]один[/u] сокет и этот один fastcgi_pass обслуживает все запросы. И все эти запросы не ждут по одному пока их рассчитают - всё работает параллельно.
>
> В Windows же c php-cgi у меня задачи эти в очередь выстраиваются. Вопрос: Кто-нибудь на Windows такое поднимал, чтобы nginx+php работали нормально на низкой нагрузке? Я что-то не так делаю, или это баг в php-cgi?

Потому что на не-windows, php-cgi с запускает (столько, сколько
записано в переменной окружения PHP_FCGI_CHILDREN) детей, которые
обрабатывают запросы. На windows php-cgi эту переменную игнорирует и
работает в однопоточном режиме.

Да, я вам уже говорил, что, например, я поднимал. И говорил как: нужно
запустить несколько php-cgi. Отдельно. И настроить upstream из
нескольких портов.

> [i]Про upstream всё правильно, да. Таймауты тут не причём, просто по
> очереди перебираются бекенды, да. Есть модуль fair upstream, который
> более хитро выбирает бекенды, чтоб они равномерно были загружены.[/i]
>
> Косяк в том, что upstream перебирает бекенды случайно с учётом весов и прочего, плюс прибивает мёртвые бекенды. Но занятый php-cgi не мёртвый, поэтому он не исключается даже по нулевому таймауту, и если при переборе не повезёт, то ждать ответа придётся ровно столько же, сколько и без upstream. Поэтому такое решение не подходит и смысла плодить php-cgi нету...
>

"прибивает мёртвые бекенды" — фантазия. Было бы здорово, но увы, нет.
nginx не управляет бекендами.

Начиная с "занятый php-cgi не мёртвый, поэтому он не исключается даже
по нулевому таймауту" тоже фантазия и дальнейшие выводы (долго ждать
ответа, решение не подходит), на ней основанные, неверны.

У вас была проблема с настройкой nginx + несколько отдельных php-cgi
бекендов? Так надо было именно с этой проблемой и обращаться, чтобы
вам посоветовали как её решить. А скоропостижные выводы, типа "так
ничего не выйдет", вашу задачу решить не поможет.

fastcgi_next_upstream error timeout; # это значение по-умолчанию,
проверьте, что вы его не меняли

fastcgi_connect_timeout 1;
и nginx будет пробовать следующий бекенд, следующий и так пока не
найдёт свободный.


Подробная информация о списке рассылки nginx-ru