我目前在Centos 6.6操作系统上运行nginx / 1.0.15。 该服务器具有以下规格:
问题
服务器有一个1Gbit / s的连接,但是在400-500Mbit / s之后会出现瓶颈。 服务在大约100个连接处开始下降..服务器的速度急剧下降(尽pipe仍有50%的带宽可用)
NGINX服务器严格用于提供静态.mp4文件。 每个文件通常是400-1200MB(平均700MB)
我已经尝试了很多很多configuration,几乎所有的configuration都给了我相同的结果..我非常沮丧..
服务器负载也永远不会超过0.3。
在我的configuration中是否有明显的错误或误导? 任何事情都可能有帮助
configuration
/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或更新)function线程池可以真正有助于你的情况:
location / { root /home; aio threads; mp4; }
在testing样本上,它极大地帮助您将带宽从1Gbps提高到9Gbps。 九次! 你只有1Gbps,但它使所有利用。
查看更多详情: https : //www.nginx.com/blog/thread-pools-boost-performance-9x/
实际的.mp4文件是一个很好的开始,那里通常有大量的改进。
因此,在调整NGINX或Apache之前,请先调整.mp4文件。
对于这个职位电影就像一个电影或电视节目,每个框架的变化是必需的。 换句话说,试图将像“Croods”这样的电影重新编码为1 fps(帧/秒)会降低质量以至于无法观看。
而非电影则指的是截图,我们的课件发布到Udemy的networking研讨会。
首先考虑文件的audio组件。 如果audio组件主要是说话,那么使用ffmpeg重新编码复制videostream的文件(不变)+将立体声stream转换为单声道。 对于很多.mp4文件(非电影),大约为电影文件大小的1/3是video+ 1/3是左声道+ 1/3是右声道。 从立体声切换到单声道,可以大大减less文件大小。
其次,使用FDK-AAC( https://github.com/mstorsjo/fdk-aac )重新编码audio,这比其他aac编码器产生的文件要小得多。 大多数现代版本的ffmpeg现在自动构buildFDK-AAC。 即使Macports现在build立这个。 一个考虑,FDK做它真正的魔术需要一个立体声跟踪+当使用FDK立体声audio压缩比单声道小得多,所以如果你使用FDK,坚持立体声。
第三,对于audio降低比特率。 很多时候这是48k,所以一般使用-ar 44100(ffmpeg)或者说口语(低fi)考虑下降到22050。
第四,把你的video的帧速率设置得尽可能低。 所以如果你正在做一个屏幕截图,一个帧可能只会在10-60秒内改变一次,所以你可以使用-r $ fps,从30-60 fps到1-5 fps多次下降帧速率,质量保持不变而文件大小直线下降。
很多时候,我压缩非电影文件,每1G减less到10-20M。
第五,确保faststart mov atom位于文件的前面,这样您的文件就可以stream式传输而不是下载了。
我的ffmpeg fdk参数…
-c:libfdk_aac -profile:aac_he_v2 -afterburner 1 -signaling explicit_sbr -vbr 5 -ac 2 -ar 44100
实际上,这是一个典型的完整的ffmpeg命令…
mp4脚本只是ffmpeg的一个包装,它能够做一些事情来猜测audio+video轨道是英文的(对于多轨avi + mkv文件)+然后构buildffmpeg命令。 最令人感兴趣的是实际的命令,这是多年实验的残余。
尝试先通过ffmpeg极端压缩来运行你的文件,然后看看这个文件的权重是如此的低/小,那么就不需要调整Web服务器。
实验的领域:-r $ fps + -v:crf + -v:预设+ -ar比特率
一点实验会给你最小的文件大小+可接受的质量的设置。
很多奇怪的选项,例如+ genpts +清除SAR / DAR,都可以确保.R4文件在Roku单元上播放。 这些都是很好的保留,如果你每一个设置自己的Roku频道,这是一个免费的方式来达到500万以上的家庭。
我的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:a aac_he_v2 -afterburner 1 -signaling explicit_sbr -vbr 5 -ac 2 -ar 44100 – metadata title ='Foo(TC)'-threads 0 -f mp4 -benchmark Foo-640×480-veryfast-crf18-max-tc.mp4.tmp mv -f Foo-640×480-veryfast-crf18-max-tc.mp4.tmp富-640×480-veryfast-crf18-MAX-tc.mp4