ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



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@xxxxxxxx> написал:

Здравствуйте.

Файл отдается так: сначала идет обращение к скрипту, который делает
все необходимые проверки и потом выдает такое:

   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
Кб/с).

Какие настройки нужно менять и где крутить?
Спасибо!






 




Copyright © Lexa Software, 1996-2009.