Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Долгий коннект к сер веру (часть вторая)
Недавно писал с темой "Долгий коннект к серверу", с того момента накопилось
много информации, решил создать новую ветку. На всякий случай снова информация
о системе:
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;
}
}
}
|