各种流媒体服务器性能测试

  今天正好有80Gbps的万兆网络环境,写了一个压力测试工具,对比了一下各种流媒体服务器,在超级并发下的性能如何,原来听说intel的万兆网卡有问题,只能跑到不到的理论带宽,这点我测试过了,用intel最新的驱动,centos6,最次能跑到80%的理论带宽,最高能跑到95%以上,完全没有问题,需要注意的是nginx
采用异步架构,因为rtmp协议实际上损失了部分性能,实际上http的性能比这个更高。http跑到过72Gbps,带宽的90%。

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
  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)。

时间: 2024-10-13 10:36:20

各种流媒体服务器性能测试的相关文章

nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器

参照网址: [1]http://blog.csdn.net/redstarofsleep/article/details/45092147 [2]HLS介绍:http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html 上面这两个流的地址分别是: 第一个就是推送的地址: RTMP推流地址: rtmp://serverIp:1935/myapp/test1 第二个是HTTP地址: HLS推流地址: http://serverIp:

流媒体服务器

常见的流媒体相关协议: 名称 描述 rtmp adobe公司开放的实时流媒体协议,在互联网直播中应用广泛 rtsp 开源的实时流媒体协议,用于信令交互,在监控视频中应用广泛 sdp 流描述协议,配合rtsp协议使用 rtp 实时传输协议,配合rtsp协议使用,用于传输流媒体数据 rtcp 实时传输控制协议,配合rtp协议使用,用于控制数据传输 常见的开源流媒体服务器: 支持协议 项目名称 简介 rtmp nginx-rtmp-module 开源rtmp服务器,作为nginx服务器的一个模块,支持

[Linux]流媒体服务器概述

二.何为流媒体与流式传输? 2.1 流媒体 「流媒体」是指采用「流式传输」的方式在Internet播放的媒体格式,流媒体最大的特点就是「边下边播」,常用的流媒体格式有FLV(使用FLASH作为视频播放载体).TS等 2.2 流式传输 「流式传输」指通过网络传送流媒体的技术总称.流式传输分为「实时流式传输」与「顺序流式传输」.一般来说,如果视频为直播,即为实时流式传输.如果视频不是直播,文件通过顺序流发送,即为顺序流式传输. 三.何为解复用? 「解复用」是指从「音频视频信号源」中分流出「单独的音频

nginx搭建rtmp协议流媒体服务器总结

最近在 ubuntu12.04+wdlinux(centos)上搭建了一个rtmp服务器,感觉还挺麻烦的,所以记录下. 大部分都是参考网络上的资料. 前提: 在linux下某个目录中新建一个nginx目录. 然后进入该目录去下载搭建环境所需要的一些资源包. 此处在 /root/  目录下新建一个nginx目录即: /root/softsource/ 注意:依赖包和工具包需要下载,请在良好的网络环境下安装,否则在网速不好的情况下容易下漏掉,造成后面安装失败 ====================

主流流媒体服务器

1 Flash流媒体服务器 Red52 Darwin Streaming Server3 流媒体服务器 Open Streaming Server4 MPEG4IP5 开源流媒体平台 FreeCast6 流媒体服务器 Yass7 开源流媒体平台 Stream-2-Stream8 Flumotion 流媒体服务器9 icecast10 WEB自动点唱机 netjukebox11 流媒体解决方案 live55512 Helix DNA Platform13 电视流媒体服务器 Tvheadend14

rtmp与hls流媒体服务器搭建:ubuntu下Nginx搭建初探与rtmp-module的添加

关键词:Nignx(http服务器):rtmp,hls(流媒体服务) 前言:感谢开源,感谢战斗民族.现在在做流媒体服务的一些工作,流媒体服务器搭建的网上教程多入牛毛,但是细细查看,发现很多同志贴上来的教程都有些许问题,还有一些是爬别人的数据得来的,排版上也有问题,让新手无所适从.本文也是通过翻看一些优质的博文得到的这篇分享.以下分享的网址就是引用的博文,安利一下. 1. http://redstarofsleep.iteye.com/blog/2123752 2. http://blog.csd

nginx搭建支持http和rtmp协议的流媒体服务器之一

实验目的: 让Nginx支持flv和mp4格式文件,支持RTMP协议的直播和点播: 同时打开RTMP的HLS功能 ?资料: HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议. HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器. 它也很容易使用内容分发网络来传输媒体流. 使用ffmpeg来完成对flv.mp4.mp3等格式的转化(点播实验暂时不测试) 一.准备工作

ffmpeg+ffserver搭建流媒体服务器

http://blog.chinaunix.net/uid-9688646-id-3399113.html ffmpeg和ffserver配合使用可以实现实时的流媒体服务. 一.理解 里边主要有如下四个东西,搞清楚他们之间的关系就差不多明白了. 1. ffmpeg 2. ffserver 3. ffserver.conf 4. feed1.ffm 1. ffmpeg,负责媒体文件的transcode工作,把你服务器上的源媒体文件转换成要发送出去的流媒体文件. 2. ffserver,负责响应客户

Ubuntu 10.04下架设流媒体服务器

Ubuntu 10.04下架设流媒体服务器 个人建议:使用DarwinStreamingSrvr5.5.5,因为DarwinStreamingSrvr6.0.3安装过程中有很多问题需要解决! 目前主流的流媒体服务器有微软的windows media server.RealNetworks的Helix server和苹果公司的Darwin Streaming Server. 微软的windows media server只能在windows 2000 server和windows 2003 ser