今天正好有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的数据如下:

Java当中的流媒体服务 http流媒体服务器_java

比起Wowza2,后者的效率高20%,内存使用只有10%,延迟极佳。wowza3的CPU/Mem/Load就是一坨屎。

Test 8k Clients

8k连接的数据如下:

Java当中的流媒体服务 http流媒体服务器_nginx_02

比起Wowza2,后者的内存使用只有0.5%,延迟极佳。Wowza3跑不到8k。

Test 12k Clients

12k连接的数据如下,12k左右时带宽需要达到10Gbps:

Java当中的流媒体服务 http流媒体服务器_nginx_03

可见,wowza2/3根本就无法达到10Gbps,尽管在80Gbps带宽中也达不到(http可是能到72Gbps)。而nginx同源架构的rtmp服务器,也能到10Gbps。

因为客户端负载过高(29.9),所以无法继续开更多客户端测试,服务器的负载还很低,还可以开启更多的客户端。

其他因素

除了性能之外,网络服务器需要考虑的因素包括:

Java当中的流媒体服务 http流媒体服务器_nginx_04

理论上,nginx或者st这种架构,为网络服务器的最优架构。

多进程+单线程+异步socket+HTTP===超级网络服务器(nginx)。

多进程+单线程+异步socket+Rtmp===超级RTMP服务器(nginx-rtmp/SmartServer)。