Ken*_*thx 8 performance nginx hard-drive streaming
我目前在 Centos 6.6 操作系统上运行 nginx/1.0.15。服务器具有以下规格:
问题
服务器有 1Gbit/s 的连接,但是它在 400-500 mbit/s 后达到顶峰和瓶颈。服务在大约 100 个连接时开始下降......并且服务器的速度急剧下降(尽管仍有 50% 的带宽可用)
NGINX 服务器严格用于提供静态 .mp4 文件。每个文件通常为 400-1200MB(平均 700MB)
我尝试了许多配置,几乎所有配置都给了我相同的结果..我非常沮丧..
服务器负载也永远不会超过 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;
}
Run Code Online (Sandbox Code Playgroud)
/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;
}
}
Run Code Online (Sandbox Code Playgroud)
更好的开始可以是以下规则集:
配置:
events {
accept_mutex off;
}
access_log off;
sendfile on;
sendfile_max_chunk 512k;
Run Code Online (Sandbox Code Playgroud)
新的 Nginx(1.7.11 或更高版本)功能线程池对您的情况非常有帮助:
location / {
root /home;
aio threads;
mp4;
}
Run Code Online (Sandbox Code Playgroud)
在测试样本上,它极大地帮助您将带宽从 1Gbps 增加到 9Gbps。九次!您只有 1Gbps,但它可以充分利用。
查看更多详情:https : //www.nginx.com/blog/thread-pools-boost-performance-9x/
小智 5
一个好的第一个起点是实际的 .mp4 文件,其中通常有大量需要改进的地方。
因此,在迷失调整 NGINX 或 Apache 之前,首先调整您的 .mp4 文件。
对于此后期电影来说,就像电影或电视节目一样,每个帧都需要更改。换句话说,尝试将像《疯狂原始人》这样的电影重新编码为 1 fps(帧/秒)会降低质量,导致无法观看。
非电影是指屏幕截图,例如我们发布到 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) 或对于口语(低 fi)考虑降至 22050。
第四,将视频的帧速率设置得尽可能低。因此,如果您正在进行屏幕捕获,帧可能只会在 10-60 秒内更改一次,因此您可以使用 -r $fps 降低帧速率,多次从 30-60 fps 降至 1-5 fps + 质量保持不变同时文件大小直线下降。
很多时候我会压缩非电影文件,每 1G 减少到 10-20M。
第五,确保 faststart movatom 位于文件的前面,这样您的文件就可以流式传输而不是下载。
我的 ffmpeg fdk 参数...
-c:libfdk_aac -配置文件:aac_he_v2 -afterburner 1 -信令explicit_sbr -vbr 5 -ac 2 -ar 44100
事实上,这是一个典型的完整 ffmpeg 命令......
mp4 脚本只是 ffmpeg 的包装器,它可以执行一些操作,例如猜测哪些音频+视频轨道是英文的(对于多轨 avi + mkv 文件)+然后构建 ffmpeg 命令。令人感兴趣的是实际的命令,它是多年实验的残留物。
首先尝试通过 ffmpeg 极限压缩运行文件,然后查看文件权重是否如此低/小,是否不需要 Web 服务器调整。
实验领域:-r $fps + -v:crf + -v:preset + -ar 比特率
一些实验将为您提供最小文件大小+可接受的质量的设置。
许多奇怪的选项(例如 +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' 不错 -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:a aac_he_v2 -afterburner 1 -信令explicit_sbr -vbr 5 -ac 2 -ar 44100 -元数据标题 = 'Foo (TC)' -线程 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
归档时间: |
|
查看次数: |
21136 次 |
最近记录: |