Ключевые слова:tune, speed, bandwidth, nginx, linux, sysctl, (найти похожие документы)
From: Arkadiy Kulev
Newsgroups: nginx-ru
Date: Mon, 26 Jan 2008 18:21:07 +0000 (UTC)
Subject: Увеличение скорости отдачи большого количества мелких файлов через nginx
Оригинал: http://www.lexa.ru/nginx-ru/msg12003.html
> я работаю под линуксом 2.6.20 с 1 гигом оперативки и сервером core2duo
> (правда настроенным под 32 бита).
> сервер используется для отдачи большого количества мелких изображений,
> а также видео flv по 2-3 мегабайта.
> в среднем около 50-70 запросов в секунду.
> было несколько конфигов, первый с worker_processes=10.
> стал замечать, что соединение устанавливается очень долго.
> увеличил до 100, соединение происходит мнгновенно, ок.
> но в обоих случаях скорость отдачи для flv (да и для картинок тоже)
> не превышала 10-20 килобайт в секунду, хотя лимитов никаких не было.
> запустил для проверки второй nginx на другом порту и только для себя,
> flv качается со скоростью 600 килобайт в сек (отличный результат) -
> делаю предположение, что проблема не в дисках (там внешний RAID 5 на
> 8 дисков).
> так вот проблема - как подобрать или настроить nginx так чтобы и в
> первом варианте было также.
> текущий рабочий конфиг приведен ниже:
worker_processes 100;
worker_rlimit_nofile 10240;
worker_rlimit_sigpending 32768;
error_log /home/nginxstorage.err error;
events {
worker_connections 1024;
use epoll;
}
http {
proxy_buffering off;
proxy_temp_path /ram;
proxy_buffers 30 8k;
proxy_connect_timeout 4;
proxy_read_timeout 60;
proxy_send_timeout 60;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
client_header_buffer_size 4k;
large_client_header_buffers 16 8k;
client_max_body_size 220m;
output_buffers 32 512k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 10;
lingering_time 30;
lingering_timeout 6;
reset_timedout_connection on;
...
Сам решил свою проблему.
установил на listen директиве параметр sndbuf=512k, а в
/etc/sysctl.conf прописал
# increase TCP max buffer size
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# increase Linux autotuning TCP buffer limits
# min, default, and max number of bytes to use
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
и сделал sysctl -p
Igor Sysoev: Можно попробовать
sendfile_max_chunk 128k;