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