nginx для отдачи больших файлов

MZ zuborg at advancedhosters.com
Tue Feb 24 20:43:27 MSK 2009


Lin wrote:
> Дописал Location для files. Но со скоростью продолжает твориться что-то непонятное.
> Поначалу вроде бы все работает нормально, но через пару часов скорость отдачи файлов резко падает.
> Как можно посмотреть, сколько сессий на данный момент обрабатывает nginx? чтобы хотя бы примерно представлять нагрузку. в nginx есть что-нибудь типа /server-status/ для apache?

Когда проблемы со скоростью - что показывает netstat -m и vmstat -z ?
Попробуй sendfile off;
Какая длина очереди на винт в среднем (смотреть gstat-ом)?
Поставь кол-во воркеров раза в два больше среднего размера очереди.
Следи чтобы nginx не писал проксируемый контент на диск активно 
(/var/tmp/nginx если не ошибаюсь) - лучше буфера подыми.

> И еще один вопрос. Для nginx есть разница 32 или 64-битной является система? такое чувство, что на 64-битной он работает хуже.

Для nginx нет, для системы есть.
В частности, на 64-бит системе требуется значительно больше памяти ядра 
(kmem) при той же нагрузке (из-за того что размеры структур 
увеличиваются почти в два раза - сравни vmstat -z)
Плюс нагрузка на шину больше.

>> А для files location'a нету. Он все равно проксирует на апач. Нужно дописать
>> что-то типа
>> location /files {
>>     internal;
>>     root корневая_папка;
>> }
>>
>> 23 февраля 2009 г. 21:08 пользователь shaman <shaman712 at inbox.ru> написал:
>>
>>> Здравствуйте.
>>>
>>> Файл отдается так: сначала идет обращение к скрипту, который делает
>>> все необходимые проверки и потом выдает такое:
>>>
>>>    header('Content-Type: application/octet-stream');
>>>    header('Content-Disposition: attachment; filename="'.$filename . '";');
>>>    header("X-Accel-Redirect: /files/" . $filename);
>>>
>>> Т.е. выполняется редирект на nginx, который и отдает файл. Я, надеюсь,
>>> правильно делаю? :)
>>>
>>>> Судя по конфигурационному файлу, вы все запросы прокачиваете через апач?
>>> А напрямую отдавать
>>>> самим        nginx`ом       эти       самый       файлы       например
>>>> http://blog.kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/ ?
>>>>> Система FreeBSD 7, 4 Гб RAM.
>>>>> nginx нужно использовать для отправки файлов самого разного размера: от
>>> 2-3 кб до 2-3 гб.
>>>>> Пытался подобрать оптимальный конфиг, но не очень получается.
>>>>> Вот, что у меня на данный момент:
>>>
>>>>> user www www;
>>>>> worker_processes 1;
>>>>> worker_rlimit_nofile 10240;
>>>>> worker_rlimit_sigpending 32768;
>>>>> worker_priority 5;
>>>>> error_log /.../nginx_error_log info;
>>>>> events {
>>>>>     worker_connections  20480;
>>>>>     use kqueue;
>>>>> }
>>>>> http {
>>>>>     default_type    application/octet-stream;
>>>>>     log_format main
>>>>>         '$remote_addr - $remote_user [$time_local] '
>>>>>             '"$request" $status $bytes_sent '
>>>>>         '"$http_referer" "$http_user_agent" '
>>>>>         '"$gzip_ratio"';
>>>
>>>
>>>>> access_log /.../nginx_access_log main;
>>>
>>>
>>>
>>>>>     client_header_timeout  60;
>>>>>     client_body_timeout    60;
>>>>>     send_timeout           120;
>>>>>     proxy_read_timeout     180;
>>>>>     proxy_connect_timeout  60;
>>>>>     proxy_send_timeout     180;
>>>
>>>>>     msie_padding on;
>>>>>     proxy_buffer_size          32k;
>>>>>     proxy_buffers              64 512k;
>>>>>     proxy_busy_buffers_size    1024k;
>>>>>     proxy_temp_file_write_size 1024k;
>>>>>     gzip on;
>>>>>     gzip_min_length  10240;
>>>>>     gzip_buffers     32 64k;
>>>>>     gzip_types       text/html application/x-javascript text/css
>>> text/xml
>>>>> text/plain;
>>>>>     client_header_buffer_size    4k;
>>>>>     client_max_body_size 120000000;
>>>>>     large_client_header_buffers  16 8k;
>>>>>     sendfile       on;
>>>>>     tcp_nopush     on;
>>>>>     tcp_nodelay    on;
>>>>>     output_buffers   32 256k;
>>>>>     postpone_output  1460;
>>>>>     lingering_time     30;
>>>>>     lingering_timeout  6;
>>>>>     reset_timedout_connection  on;
>>>>>     keepalive_timeout  20;
>>>>>     optimize_server_names on;
>>>>>     index index.html;
>>>>>     server {
>>>>>         listen       ххх.ххх.ххх.ххх:80;
>>>>>         server_name  ххх;
>>>>>         location / {
>>>>>             proxy_pass         http://127.0.0.1:81/;
>>>>>             proxy_redirect     off;
>>>>>             proxy_set_header   Host             $host;
>>>>>             proxy_set_header   X-Real-IP        $remote_addr;
>>>>>         }
>>>>>     }
>>>>> }
>>>
>>>>> Но проблемы следующие:
>>>>> - большие паузы перед отдачей файла (сразу после старта сервера
>>>>> отдает сразу же, через некоторое время начинаются приличные паузы).
>>>>> - непонятная скорость отдачи файлов. файлы отдаются рывками,
>>>>> скорость иногда запредельно низкая (10-15 Кб/с, когда нормальная 300-500
>>> Кб/с).
>>>
>>>>> Какие настройки нужно менять и где крутить?
>>>>> Спасибо!
> 
> 






More information about the nginx-ru mailing list