Долгий коннект к серверу (часть вторая)
Oleg I.
support at sharedzilla.com
Sun Feb 25 04:01:57 MSK 2007
Недавно писал с темой "Долгий коннект к серверу", с того момента накопилось много информации, решил создать новую ветку. На всякий случай снова информация о системе:
uname -smr
FreeBSD 6.2-RELEASE-p1 i386
ginx -v
nginx version: nginx/0.5.12
В системе установлен RAID5 250GBx8;
Пробовали использовать одинаковые конфигурационные файлы (полный листинг приведу в конце сообщения), изменяя только worker_processes. Теперь о результатах при идентичных нагрузках (конфиг менялся на продакшн сервере с остановкой и запуском nginx):
worker_processes = 1
Подключение к серверу происходит мгновенно, обработка запроса занимает длительное время (от 10 до 30 секунд, в зависимости от количества подключений). Время обработки запроса не зависит от размера файла. Процесс постоянно висит в статусе biord. В лог сыпятся ошибки (возможно, пользователи не дожидаются начала загрузки и закрывают соединение):
accept() failed (53: Software caused connection abort) while accepting new connection
worker_processes > 2
Очень часто соединение с сервером происходит долго либо пользователи при попытке подключения отваливаются по таймауту. Время обработки запроса напротив совсем незначительное. Состояние biord проскакивает не часто, большинство процессов находятся в kqueue.
И в том и в другом случае с увеличением количества подключений > 2000 (600-700 уникальных пользователей) появляются проблемы с "провисанием" загрузки. Т.е. пользователь загружает файл в один поток на скорости 10-11кб, потом происходит резкое падение скорости и некоторое время (5-10 секунд) в сокет ничего не передается. Затем резкий скачок (до 20-30кб), после чего скорость снова нормализуется.
При этом (worker_processes = 1) нагрузка на диски:
Disks ad4 da0
KB/t 85.77 88.79
tps 39 79
MB/s 3.24 6.87
% busy 36 70
В файрволе очередь для балансировки:
ipfw pipe 1 config bw 95Mbit/s delay 10ms
ipfw queue 1 config pipe 1 weight 1 mask all
ipfw add 1000 queue 1 tcp from me 80 to any
И ничего не помогает. Подскажите, в чем может быть проблема и как ее лечить. Танцы с бубном уже утомили, причем не только нас но и пользователей :(
Конфигурационный файл:
user developer developer;
worker_processes 1;
worker_priority -5;
events {
worker_connections 10000;
use kqueue;
}
http {
limit_zone one $binary_remote_addr 10m;
limit_conn one 4;
access_log off;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 0;
optimize_server_names on;
perl_modules /www/xxx.com/cgi-bin;
perl_require Digest/MD5.pm;
perl_require Unpack.pm;
server {
listen xxx:80 default sndbuf=64K;
server_name xxx.com;
charset windows-1251;
error_log /www/logs/d2nginx.error;
location / {
root /www/xxx.com/htdocs;
index index.html index.htm index.cgi;
}
location /downloads/ {
perl Unpack::handler;
root /www/xxx.com/htdocs;
expires 30d;
}
location ~ /\.ht {
deny all;
}
}
}
More information about the nginx-ru
mailing list