今天正好有80Gbps的万兆网络环境,写了一个压力测试工具,对比了一下各种流媒体服务器,在超级并发下的性能如何,原来听说intel的万兆网卡有问题,只能跑到不到的理论带宽,这点我测试过了,用intel最新的驱动,centos6,最次能跑到80%的理论带宽,最高能跑到95%以上,完全没有问题,需要注意的是nginx
采用异步架构,因为rtmp协议实际上损失了部分性能,实际上http的性能比这个更高。http跑到过72Gbps,带宽的90%。
nginx-rtmp做edge的配置:
rtmp {
server {
listen 1935;
application edge{
live on;
pull rtmp://127.0.0.1:2935/live;
}
}
}
也就是说,源站的播放地址是:rtmp://192.168.1.50:2935/live/livestream,而边缘的播放地址是:rtmp://192.168.1.50:1935/edge/livestream
Wowza2的配置:
修改:/usr/local/WowzaMediaServer/bin/startup.sh
多分配内存,否则无法支持8k连接:-Xms2024m -Xmx6048m
java -server -Djava.net.preferIPv4Stack=true
-Dcom.sun.management.jmxremote=true -Xms2024m -Xmx13048m
-Dcom.wowza.wms.AppHome=/usr/local/WowzaMediaServer -Dcom.wowza.wms.ConfigURL=
-Dcom.wowza.wms.ConfigHome=/usr/local/WowzaMediaServer -cp
/usr/local/WowzaMediaServer/bin/wms-bootstrap.jar
com.wowza.wms.bootstrap.Bootstrap start
修改Ping超时设置:
/usr/local/WowzaMediaServer/conf/live/Application.xml
60000000
12000000
Wowza3的配置:
修改:/usr/local/WowzaMediaServer/bin/startup.sh
多分配内存,否则无法支持8k连接:-Xms2024m -Xmx6048m
$_EXECJAVA -server -Xms2024m -Xmx13048m
-Djava.net.preferIPv4Stack=true $JMXOPTIONS -Dcom.wowza.wms.runmode="$mode"
-Dcom.wowza.wms.native.base="linux" -Dcom.wowza.wms.AppHome="$WMSAPP_HOME"
-Dcom.wowza.wms.ConfigURL="$WMSCONFIG_URL"
-Dcom.wowza.wms.ConfigHome="$WMSCONFIG_HOME" -cp
$WMSAPP_HOME/bin/wms-bootstrap.jar com.wowza.wms.bootstrap.Bootstrap
start
修改Ping超时设置:
/usr/local/WowzaMediaServer/conf/live/Application.xml
60000000
12000000
测试数据如下。
Test 5k Clients
5.5k的数据如下:
RTMP 900kbps 5k Clients
Wowza2
Wowza3
SmartServer
NginxRtmp(Origin)
NginxRtmp(Edge)
CPU
663.9%
1247.5%
494%
310%
425%
Mem
1GB
6.7GB
118MB
216MB
244MB
Load
3.99
26.53
4.06
3.33
4.77
Process
1
1
8
8
8
Threads
242
242
8
8
8
Bandwidth Required
4.68Gbps
4.68Gbps
4.68Gbps
4.68Gbps
4.68Gbps
Bandwidth Actual
4.14Gbps
4.2Gbps
4.5Gbps
4.9Gbps
4.9Gbps
Connections
5168
5203
5201
5204
5202
Client-Load
5.68
26.53
3.70
7.74
10.94
FlashPlay(Win7) delay
7s
-s
1.2s
3s
1s
Architecture
java,
single-process,
multiple-thread
java,
single-process,
multiple-thread
c++/st,
multiple-process,
single-thread,
async-socket
c,
multiple-process,
single-thread,
async-socket
c,
multiple-process,
single-thread,
async-socket
比起Wowza2,后者的效率高20%,内存使用只有10%,延迟极佳。wowza3的CPU/Mem/Load就是一坨屎。
Test 8k Clients
8k连接的数据如下:
RTMP 900kbps 8k Clients
Wowza2
Wowza3
SmartServer
NginxRtmp(Origin)
NginxRtmp(Edge)
CPU
811.6%
1472.3%
813.7%
488%
575%
Mem
5GB
10GB
188MB
254MB
307MB
Load
5.55
29.16
7.18
5.53
5.08
Process
1
1
12
8
8
Threads
242
242
12
8
8
Bandwidth Required
7.2Gbps
7.2Gbps
7.2Gbps
7.2Gbps
7.2Gbps
Bandwidth Actual
6.5Gbps
3.6Gbps
7.6Gbps
7.6Gbps
7.5Gbps
Connections
8003
8003
8001
8004
8002
Client-Load
13.31
2.73
12.05
17.81
17.94
FlashPlay(Win7) delay
14s
-s
1s
4s
1.7s
Architecture
java,
single-process,
multiple-thread
java,
single-process,
multiple-thread
c++/st,
multiple-process,
single-thread,
async-socket
c,
multiple-process,
single-thread,
async-socket
c,
multiple-process,
single-thread,
async-socket
比起Wowza2,后者的内存使用只有0.5%,延迟极佳。Wowza3跑不到8k。
Test 12k Clients
12k连接的数据如下,12k左右时带宽需要达到10Gbps:
RTMP 900kbps 12k Clients
Wowza2
Wowza3
SmartServer
NginxRtmp(Origin)
NginxRtmp(Edge)
CPU
1743.1%
不支持
864.7%
487%
378%
Mem
11GB
不支持
1.7GB
342MB
378MB
Load
13
不支持
3.39
4.35
3.96
Process
1
1
17
8
8
Threads
242
242
17
8
8
Bandwidth Required
10Gbps
不支持
9.9Gbps
10Gbps
10Gbps
Bandwidth Actual
7.4Gbps
不支持
10.1Gbps
8.5Gbps
8.48Gbps
Connections
12002
不支持
11245
12004
11960
Client-Load
3
不支持
29.94
30.47
30.29
FlashPlay(Win7) delay
NaN
(客户端
直接卡死)
不支持
1.7s
3s
1.3s
Architecture
java,
single-process,
multiple-thread
java,
single-process,
multiple-thread
c++/st,
multiple-process,
single-thread,
async-socket
c,
multiple-process,
single-thread,
async-socket
c,
multiple-process,
single-thread,
async-socket
可见,wowza2/3根本就无法达到10Gbps,尽管在80Gbps带宽中也达不到(http可是能到72Gbps)。而nginx同源架构的rtmp服务器,也能到10Gbps。
因为客户端负载过高(29.9),所以无法继续开更多客户端测试,服务器的负载还很低,还可以开启更多的客户端。
其他因素
除了性能之外,网络服务器需要考虑的因素包括:
其他对比
Wowza2
SmartServer
NginxRtmp
集群
Origin+Edge
Edge
Origin+Edge
主备
不支持
支持
不支持
直播转码
支持
不支持
支持
HLS
支持
不支持
支持
可维护性
容易
容易
很难
监控数据
不支持
支持
不支持
HTTP接口
不支持
不支持
支持
Reload
不支持
支持
支持
带宽检测
不支持
支持
不支持
极简配置
不支持
支持
部分支持
(Edge回源时
必须指定app)
理论上,nginx或者st这种架构,为网络服务器的最优架构。
多进程+单线程+异步socket+HTTP===超级网络服务器(nginx)。
多进程+单线程+异步socket+Rtmp===超级RTMP服务器(nginx-rtmp/SmartServer)。
原文:http://www.cnblogs.com/fuland/p/3709540.html