Re[2]: PHP FastCGI и "upstream prematurely closed connection"
Сухачев Андрей
andrew at comby.com
Mon Apr 9 12:08:59 MSD 2007
Hello Roxis,
Monday, April 9, 2007, 11:45:44 AM, you wrote:
> On Monday 09 April 2007, Сухачев Андрей wrote:
>> By default, PHP stops accepting new FastCGI connections after handling
>> 500 requests; unfortunately, there is a potential race condition during the
>> PHP cleanup code in which PHP can be shutting down but still have the
>> socket open, so mod_fcgid under heavy load can send request number 501 to
>> PHP and have it "accepted", but then PHP appears to simply exit, causing
>> errors.
>> Надо будет проверить это...
> PHP_FCGI_MAX_REQUESTS по дефолту равно 500
Да, именно на это и подозрения. В самом коде php-cgi написано:
int max_requests = 500;
...
if (getenv("PHP_FCGI_MAX_REQUESTS"))
max_requests = atoi(getenv("PHP_FCGI_MAX_REQUESTS"));
...
requests++;
if (max_requests && (requests == max_requests)) {
FCGX_Finish_r(&request);
/* end of fastcgi loop */
}
И я очень сильно подозреваю, что запросы, которые попадают в этот интервал и падают в лог с
" upstream prematurely closed connection while reading response header from upstream".
Интересно, а nginx может в случае отлупа от fast-cgi сервера, посылать запрос на следующий fast-cgi?
Тогда можно было бы в тупую обойти это:
upstream {
server fastcgi://127.0.0.1:9000;
server fastcgi://127.0.0.1:9000;
}
Тогда даже если запрос попадает на такой "умирающий" процесс, nginx его просто перебросит на
другой процесс. Шансы что тот тоже окажется умирающим близки к нулю.
--
Best regards,
Сухачев mailto:andrew at comby.com
More information about the nginx-ru
mailing list