[Windows + fastcgi + php] Валится или перестаёт отвечать
FireFenix
nginx-forum at nginx.us
Wed Apr 17 12:59:53 UTC 2013
Здраствуйте %user_name%. Я новичёк ине давно начал знакомство с nginx, и
прошу помощи:
Имеется относительно старенький дедик Dual Core AMD Opteron 2.2Ghz и 2 Gb
RAM
На котором:
* Windows Server 2003 Standart Edition SP2
* nginx 1.3.16
* php 5.4.13
На котором получился конфиг
worker_processes 2;
worker_rlimit_nofile 163840;
events
{
worker_connections 81920;
}
http
{
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 600s 600s;
gzip on;
server
{
listen 8080;
server_name localhost;
access_log off;
#rewrite_log on;
merge_slashes on;
rewrite ^/path/(.*)$ /path/index.php;
location /
{
root D:/Site;
index index.html index.htm index.php;
}
location ~ \.php$
{
root D:/Site;
fastcgi_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
Конфиг выше результирующий, вначале был дефолтный конфиг с прописанным
fastcgi
И при стандартном конфиге php-cgi.exe прибивалось на некотором запросе
Использую программку ab из Апача для теста
C:\>ab.exe -n 1000 -c 100 http://localhost:8080/index.php
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
apr_pollset_poll: The timeout specified has expired (70007)
Total of 598 requests completed
После этого php-cgi.exe улетало в космос.
Поискал в доках, и начал увеличивать worker_rlimit_nofile = 163840 и
worker_connections = 81920
Теперь картина другая, php-cgi не падает, но
* При C:\>ab.exe -n 10 -c 10 http://localhost:8080/index.php спокойно
проходит тест или при одиночных запросах из браузера
* При C:\>ab.exe -n 1000 -c 100 http://localhost:8080/index.php ложиться и
перестаёт отвечать, аналогичная картина если Ф5 зажать в браузере.
Подумал, что проблема в таймаутах, и попробовал fastcgi_read_timeout = 600 и
fastcgi_send_timeout = 600, но картина ничерта не изменилась.
Причём кроме последнего случая в лог c параметром error ничего не выпадает,
но в если включить лог debug, то в логе начинает спамить
2013/04/17 15:52:57 [debug] 3088#3300: select ready 0
2013/04/17 15:52:57 [debug] 3088#3300: timer delta: 500
2013/04/17 15:52:57 [debug] 3088#3300: posted events 00000000
2013/04/17 15:52:57 [debug] 3088#3300: worker cycle
2013/04/17 15:52:57 [debug] 3088#3300: accept mutex locked
2013/04/17 15:52:57 [debug] 3088#3300: select event: fd:156 wr:0
2013/04/17 15:52:57 [debug] 3088#3300: select timer: 500
2013/04/17 15:52:58 [debug] 212#2372: select ready 0
2013/04/17 15:52:58 [debug] 212#2372: timer delta: 500
2013/04/17 15:52:58 [debug] 212#2372: posted events 00000000
2013/04/17 15:52:58 [debug] 212#2372: worker cycle
2013/04/17 15:52:58 [debug] 212#2372: accept mutex lock failed: 0
2013/04/17 15:52:58 [debug] 212#2372: select timer: 500
даже при том, когда клиент закрыл соединение, ещё некоторое время идёт спам
лога
Так вот, товарищи знатоки, подскажите:
* Почему конфиг выше перестаёт отдавать контент?
* И как правильно настроить конфиг для ~500 юзеров работающих одновременно,
при это которые могут слать запросы один за дргуим (т.е. не постоянно, а
некоторым блоками запросов до ~100 запросов в секунду).
Хотелось бы, чтобы контент отдавался в любом случае вне зависимости, от
скорости выполнения, но в порядке очереди запросов.
Спасибо.
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,238429,238429#msg-238429
Подробная информация о списке рассылки nginx-ru