由于工作原因,用了很长时间的Wowza流媒体服务器,其实一直没有对wowza进行压力测试,很同事一起进行测试了一下wowza的压力,这里转载同事的测试文章,供参考:


下面是我同事测试数据,可以参考,因为硬件环境是我弄的,所以数据不用怀疑。

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


给某CDN公司做了一个rtmp服务器,使用state-threads(该公司首席架构师micheal定的框架),今天正好有80Gbps的万兆网络环境,就测了一下服务器在超级并发下的性能如何。

st在架构上,和nginx的异步架构是同源的,因为rtmp协议实际上损失了部分性能,实际上http的性能比这个更高。http跑到过72Gbps,带宽的90%。

手头只有wowza2的license,不过wowza2就传说能到10Gbps,我很怀疑,所以对比了一下。

nginx-rtmp做edge的配置:

  1. rtmp {  

  2.    server {  

  3.        listen 1935;  

  4.        application edge{  

  5.            live on;  

  6.            pull rtmp://127.0.0.1:2935/live;  

  7.        }  

  8.    }  

  9. }  

也就是说,源站的播放地址是:rtmp://192.168.1.50:2935/live/livestream,而边缘的播放地址是:rtmp://192.168.1.50:1935/edge/livestream

Wowza2的配置如下:

  1. 修改:/usr/local/WowzaMediaServer/bin/startup.sh  

  2. 多分配内存,否则无法支持8k连接:-Xms2024m -Xmx6048m  

  3. 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  

  4. 修改Ping超时设置:  

  5. /usr/local/WowzaMediaServer/conf/live/Application.xml  

  6. <ApplicationTimeout>60000000</ApplicationTimeout>  

  7. <PingTimeout>12000000</PingTimeout>  

Wowza3的配置更改如下:
  1. 修改:/usr/local/WowzaMediaServer/bin/startup.sh  

  2. 多分配内存,否则无法支持8k连接:-Xms2024m -Xmx6048m  

  3. $_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  

  4. 修改Ping超时设置:    

  5. /usr/local/WowzaMediaServer/conf/live/Application.xml  

  6. <ApplicationTimeout>60000000</ApplicationTimeout>  

  7. <PingTimeout>12000000</PingTimeout>  


测试数据如下。

Test 5k Clients

5.5k的数据如下:

RTMP 900kbps 5k Clients

Wowza2Wowza3SmartServerNginxRtmp(Origin)NginxRtmp(Edge)
CPU663.9%1247.5%494%310%425%
Mem1GB6.7GB118MB216MB244MB
Load3.9926.534.063.334.77
Process11888
Threads242242888
Bandwidth Required4.68Gbps4.68Gbps4.68Gbps4.68Gbps4.68Gbps
Bandwidth Actual4.14Gbps4.2Gbps4.5Gbps4.9Gbps4.9Gbps
Connections51685203520152045202
Client-Load5.6826.533.707.7410.94
FlashPlay(Win7) delay7s-s1.2s3s1s
Architecturejava,
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

Wowza2Wowza3SmartServerNginxRtmp(Origin)NginxRtmp(Edge)
CPU811.6%1472.3%813.7%488%575%
Mem5GB10GB188MB254MB307MB
Load5.5529.167.185.535.08
Process111288
Threads2422421288
Bandwidth Required7.2Gbps7.2Gbps7.2Gbps7.2Gbps7.2Gbps
Bandwidth Actual6.5Gbps3.6Gbps7.6Gbps7.6Gbps7.5Gbps
Connections80038003800180048002
Client-Load13.312.7312.0517.8117.94
FlashPlay(Win7) delay14s-s1s4s1.7s
Architecturejava,
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

Wowza2Wowza3SmartServerNginxRtmp(Origin)NginxRtmp(Edge)
CPU1743.1%不支持864.7%487%378%
Mem11GB不支持1.7GB342MB378MB
Load13不支持3.394.353.96
Process111788
Threads2422421788
Bandwidth Required10Gbps不支持9.9Gbps10Gbps10Gbps
Bandwidth Actual7.4Gbps不支持10.1Gbps8.5Gbps8.48Gbps
Connections12002不支持112451200411960
Client-Load3不支持29.9430.4730.29
FlashPlay(Win7) delayNaN
(客户端
直接卡死)
不支持1.7s3s1.3s
Architecturejava,
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),所以无法继续开更多客户端测试,服务器的负载还很低,还可以开启更多的客户端。

其他因素

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

其他对比

Wowza2SmartServerNginxRtmp
集群Origin+EdgeEdgeOrigin+Edge
主备不支持支持不支持
直播转码支持不支持支持
HLS支持不支持支持
可维护性容易容易很难
监控数据不支持支持不支持
HTTP接口不支持不支持支持
Reload不支持支持支持
Reload不支持支持支持
Vhost支持支持不支持
极简配置不支持支持部分支持
(Edge回源时
必须指定app)

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

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

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


光纤连着两台服务器:

流媒体服务器测试_压力测试_07

原地址:http://blog.csdn.net/win_lin/article/details/11927973