NGINX Обслуживание Больших mp4 Файлов чрезвычайно неэффективно

Я в настоящее время выполняю nginx/1.0.15 на ОС Centos 6.6. Сервер имеет следующие спецификации:

  • Intel(R) Atom(TM) CPU C2750 2.40 ГГц (8 ядер)
  • 32 ГБ Ram
  • 5 x 6 000 ГБ 7 200 об/мин (Набег 10)

Проблема

Сервер имеет 1Gbit/s соединение, однако он достигает высшего уровня и узкие места после 400-500 Мбит/с. Сервис начинает уменьшаться при примерно 100 соединениях.. и скорость с сервером отбрасывает существенно (несмотря на наличие 50%-й пропускной способности, все еще доступной)

Сервер NGINX строго для обслуживания статических .mp4 файлов. Каждый файл обычно 400-1200MB (700 МБ, являющихся средним числом)

Я попробовал много много конфигураций, и примерно все они дают мне те же результаты.. Я чрезвычайно расстроен..

Загрузка сервера также никогда не передает 0.3.

Есть ли что-нибудь очевидно неправильно или дезинформировано в моей конфигурации? Что-либо могло бы помочь.

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

/etc/nginx/nginx.conf

user              nginx;
worker_processes  9;

error_log  /var/log/nginx/error.log;


pid        /var/run/nginx.pid;


events {
    worker_connections  51200;
    use epoll;
 }

worker_rlimit_nofile 600000;

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  /var/log/nginx/access.log  main;
access_log off;

aio on;
sendfile        off;
tcp_nopush      off;
tcp_nodelay      on;

#keepalive_timeout  0;
keepalive_timeout  65;

output_buffers 1 3m;
#gzip  on;

include /etc/nginx/conf.d/*.conf;

open_file_cache          max=10000 inactive=5m;
open_file_cache_valid    2m;
open_file_cache_min_uses 1;
open_file_cache_errors   on;

}

/etc/nginx/conf.d/default.conf

server {
    listen       80 default_server sndbuf=32k;
    server_name  _;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    include /etc/nginx/default.d/*.conf;


    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /Videos/ {
        root /home;
        gzip off;
        gzip_static off;

        mp4;
        mp4_max_buffer_size   300m;
    }

    location /stats {
        stub_status on;
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
8
задан 14 July 2015 в 16:40
3 ответа

Лучшим началом может быть набор следующих правил:

  1. отключить ведение журнала и accept_mutex
  2. включить sendfile
  3. установить sendfile_max_chunk

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

events {
    accept_mutex off;
}

access_log off;
sendfile on;
sendfile_max_chunk 512k;

Новый Nginx (1.7 .11 или новее) пул потоков функций может быть действительно полезен в вашем случае:

location / {
    root /home;
    aio threads;
    mp4;
}

В тестовых примерах он значительно помогает вам увеличить пропускную способность с 1 Гбит / с до 9 Гбит / с. Девять раз! У вас всего 1 Гбит / с, но это позволяет использовать все.

См. Дополнительные сведения: https://www.nginx.com/blog/thread-pools-boost-performance-9x/

3
ответ дан 2 December 2019 в 23:05

Хорошее первое место для начала - это файлы .mp4, где обычно есть много областей для улучшения.

Поэтому, прежде чем заблудиться в настройке NGINX или Apache, сначала настройте ваши файлы .mp4.

Для этого поста кинематографический ролик похож на фильм или телешоу, где требуется смена каждого кадра. Другими словами, попытка перекодировать такой фильм, как «Семейка Крудс», на 1 кадр / с (кадр / секунду) снизит качество до невозможного для просмотра.

А некинематографический относится к снимкам экрана, таким как веб-семинары, наши учебные программы размещены в Udemy.

Сначала рассмотрим звуковую составляющую файла. Если аудиокомпонент в основном говорит, используйте ffmpeg для перекодировки файла, в который вы копируете видеопоток (без изменений) + конвертируйте стереопоток в моно. Для многих файлов .mp4 (не кинематографических) примерно 1/3 размера файла фильма составляет видео + 1/3 - левый аудиоканал + 1/3 - правый аудиоканал. Переход со стерео на моно может значительно уменьшить размер файла.

Во-вторых, перекодируйте звук с помощью FDK-AAC ( https://github.com/mstorsjo/fdk-aac )который производит файлы намного меньшего размера, чем другие кодировщики aac. Большинство современных версий ffmpeg в наши дни автоматически собирают FDK-AAC. Даже Macports теперь строит это. Одно соображение: для того, чтобы FDK творил настоящую магию, требуется стереодорожка + при использовании FDK стерео аудио сжатие намного меньше, чем моно, поэтому, если вы используете FDK, придерживайтесь стерео.

В-третьих, для звука уменьшите битрейт. Часто это 48k, поэтому обычно используйте -ar 44100 (ffmpeg) или для разговора (low fi) рассмотрите возможность снижения до 22050.

Далее, установите как можно более низкую частоту кадров вашего видео. Поэтому, если вы делаете снимок экрана, кадр может меняться только один раз в 10-60 секунд, поэтому вы можете снизить частоту кадров с помощью -r $ fps, много раз с 30-60 кадров в секунду до 1-5 кадров в секунду + качество останется прежним. в то время как размер файла резко падает.

Я часто сжимаю не кинематографические файлы, где каждый 1 Гб уменьшается до 10-20 МБ.

В-пятых, убедитесь, что элемент mov faststart находится в начале ваших файлов, чтобы ваши файлы можно было транслировать вместо загрузки.

Мои параметры ffmpeg fdk ...

-c: a libfdk_aac -profile: aac_he_v2 -afterburner 1 -signaling explicit_sbr -vbr 5 -ac 2 -ar 44100

Фактически, это типичная полная команда ffmpeg ...

Сценарий mp4 - это просто оболочка для ffmpeg, которая делает такие вещи, как предположение, какие аудио + видеодорожки находятся на английском языке (для многодорожечных файлов avi + mkv) + затем создаёт команду ffmpeg. Интересна сама команда, которая является остатком многолетних экспериментов.

Попробуйте сначала запустить ваши файлы через экстремальное сжатие ffmpeg, а затем посмотрите, настолько ли малы веса файлов, что настройка веб-сервера не требуется.

1238] Области экспериментов: -r $ fps + -v: crf + -v: preset + -ar bitrate

Немного поэкспериментировав, вы получите настройки для минимального размера файла + приемлемого качества.

Многие из параметров странные параметры, такие как + genpts + очистка SAR / DAR, существуют для обеспечения воспроизведения файлов .mp4 на устройствах Roku. Их хорошо сохранить на тот случай, если вы каждый настраиваете свой собственный канал Roku, который является бесплатным способом охвата более 5 000 000 семей.

Моя команда ffmpeg ...

imac> mp4 --dr --noisy foo. avi

tc: diag = v:! h264: mpeg4, a:! aac: ac3 title = 'Foo (TC)' Foo-640x480-veryfast-crf18-max-tc.mp4

cd '/ Users / david / Downloads / Casper.A.Spirited.Beginning.1997.DVDrip.iNTERNAL.XviD-BPDcarrier ' nice -19 ffmpeg -fflags + genpts -i "foo.avi" -map 0: 0 -c: v libx264 -crf: v 18 -preset: v veryfast -tune: v film -level: v 4.1 -profile: v high -bufsize: v 5000k -vf setdar = dar = 0, setsar = sar = 0 -x264opts colorprim = bt709: transfer = bt709: colormatrix = bt709: fullrange = off -r 29.97 -movflags + faststart -map 0: 1 -c: a libfdk_aac -profile: aac_he_v2 -afterburner 1 -signaling explicit_sbr -vbr 5 -ac 2 -ar 44100 -metadata title = 'Foo (TC)' -threads 0 -f mp4 -benchmark Foo-640x480-veryfast-crf18-max- tc.mp4.tmp mv -f Foo-640x480-veryfast-crf18-max-tc.mp4.tmp Foo-640x480-veryfast-crf18-max-tc.mp4

2
ответ дан 2 December 2019 в 23:05

Включение multi_accept сработало для меня (раньше видео останавливалось примерно на полпути, и посетитель не мог слушать / смотреть вторую половину, что очень расстраивает).

Единственное, что у меня есть в nginx.conf под событиями установлено следующее:

events {
worker_connections 768;
multi_accept on;
}

** Он работает сегодня LOL .... завтра нам просто нужно посмотреть, будет ли он по-прежнему воспроизводиться полностью

0
ответ дан 2 December 2019 в 23:05

Теги

Похожие вопросы