Затыки при отдаче статики

Gelun, Artem a at gelun.ru
Fri Nov 22 20:47:41 UTC 2013


Добрый вечер, коллеги

Помогите, пожалуйста, разобраться с тормозами при отдаче статики (файлы
порядка 2-4 МБайт, около 700-1000 rps, keep-alive не используется со
стороны клиента (!), 99% клиентских сессий - с localhost, отдача начинает
тормозить где-то на 2.7-3 Gbps)

проблема выглядит как периодическое "залипание" загрузки файла на некоторый
интервал (от долей секунды до нескольких секунд).

Конфигурация:

worker_processes        16;
worker_rlimit_nofile    21000;
worker_priority         -5;
error_log         /var/log/nginx/error.log;
pid               /var/run/nginx.pid;
timer_resolution        100ms;
events {
        worker_connections  10240;
        use epoll;
}
http {
        sendfile                on;
#       sendfile_max_chunk      1m;
        open_file_cache max=10240 inactive=300s;
        open_file_cache_valid 2000s;
        open_file_cache_min_uses 1;
        open_file_cache_errors on;
#       aio                             on;
#       directio                        4k;
#       directio_alignment              4k;
#       output_buffers                  128 512k;
        keepalive_timeout       60;
        underscores_in_headers  on;
        server_tokens           off;
        tcp_nodelay             on;

        ...
}

Всё что закомментировано - проверялось без результата.

Для теста сделал tmpfs (чтобы исключить тормоза HDD), поставил рядом
apache2 (чтобы минимизировать вероятность тормозов сетевого стека), с
соседнего сервера делаю запрос на файл в tmpfs, apache выдаёт его стабильно
с 24-25MBps, nginx тот же файл - в лучшем случае 12MBps,

Затыки также замечаются и на локалхосте. Скорость - от тех же 12MBps до
720MBps. Апач стабильно держит >1GBps. Вот пример времени выполнения
запросов с локалхоста:

real 0m4.167s
user 0m0.008s
sys 0m0.042s

real 0m2.085s
user 0m0.006s
sys 0m0.049s

real 0m2.079s
user 0m0.007s
sys 0m0.055s

real 0m0.623s
user 0m0.007s
sys 0m0.064s

real 0m1.225s
user 0m0.004s
sys 0m0.052s

real 0m0.333s
user 0m0.005s
sys 0m0.057s

real 0m2.097s
user 0m0.004s
sys 0m0.058s

*ОС:* 2.6.32-358.6.2.el6.x86_64 #1 SMP Thu May 16 20:59:36 UTC 2013 x86_64
x86_64 x86_64 GNU/Linux

net.core.netdev_max_backlog=20480
net.core.rmem_default=131072
net.core.rmem_max=1310720
net.core.somaxconn=2048
net.core.wmem_default=131072
net.core.wmem_max=1310720
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.secure_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.ip_forward=0
net.ipv4.tcp_dsack=1
net.ipv4.tcp_mem=24576 32768 131072
net.ipv4.tcp_rmem=4096 65536 524288
net.ipv4.tcp_sack=1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_wmem=4096 65536 524288
net.ipv4.udp_mem=8388608 12582912 33554432
net.ipv4.udp_rmem_min=16384
net.ipv4.udp_wmem_min=16384

проверялось также с:
net.ipv4.tcp_sack=0
, бОльшими числами в tcp_mem, tcp_wmem
, бОльшим числом worker'ов (до 32)

результат одинаков.

LA на сервере высокий (в основном, из-за чтения с HDD), на 16 ядрах
держится около 16.

Что я не так готовлю?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20131123/e292f137/attachment.html>


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