Я в настоящее время выполняю nginx/1.0.15 на ОС Centos 6.6. Сервер имеет следующие спецификации:
Проблема
Сервер имеет 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;
}
}
Лучшим началом может быть набор следующих правил:
Конфигурация:
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/
Хорошее первое место для начала - это файлы .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
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
Включение multi_accept сработало для меня (раньше видео останавливалось примерно на полпути, и посетитель не мог слушать / смотреть вторую половину, что очень расстраивает).
Единственное, что у меня есть в nginx.conf под событиями установлено следующее:
events {
worker_connections 768;
multi_accept on;
}
** Он работает сегодня LOL .... завтра нам просто нужно посмотреть, будет ли он по-прежнему воспроизводиться полностью