摘要:性能测试通过自动化的测试工具模拟正常、异常场景来对系统的各项性能指标进行测试。通过性能测试可以分析一个系统能力、瓶颈、关键问题等。本文结合直播平台的部分场景,使用开源SRS-Bench工具对直播并的4个场景进行压力测试,测试直播平台的基础能力。
一 、性能测评工具简介
性能测试范围较广,包含负载测试、压力测试等,负载测试可以确定在满足性能指标情况下,系统能承受的最大负载,压力测试可以确定在什么负载条件下系统性能处于失效状态,获得系统能提供的最大的服务级别,一般系统上线前均会进行性能测试。目前,较常用的性能测试工具分为商业测试工具、开源测试工具,较为常用的是Loadrunner及JMeter。Loadrunner支持HTTP、windows Sockets、FTP、SMTP、DNS协议,JMeter为Apache组织开发的基于Java的开源压力测试工具,最初应用于web应用测试,目前可支持Web-http,https,SOAP/Rest、FTP、SMTP、POP3、IMAP、TCP等协议。本次测试目标为测试直播平台的能力,国内常见的直播协议有RTMP、HLS、HTTP-flv、RTP协议,被测的直播平台使用开源SRS,主要支持RTMP/HTTP-flv/HLS三种协议,Loadrunner、JMeter对上述协议支持较差,如果使用二次开发工作量较大,调研发现可使用SRS-Bench工具作为测试工具对多人同时直播、多人同时观看、直播观看混合场景、直播录制4个场景进行测试。
二、工具安装与使用
1.工具安装
从https://github.com/ossrs/srs-bench将下载的SRS-Bench源码压缩包放到待运行的linux环境下解压缩,使用./configure && make安装编译会出现objs目录,里面就是各个压测工具的执行程序(部分操作系统可能编译不成功,可通过拷贝其他操作系统编译成功的工具直接使用)。
2.工具使用
SRS-Benc主要包括sb_rtmp_publish、sb_rtmp_load、sb_rtmp_load_fast、sb_hls_load、sb_http_load五个工具,具体使用可通过-h命令查看。
三 测试环境介绍
1.直播服务器
对直播服务器媒体性能的测试要考虑单机性能和集群性能,因此本次直播服务器测试环境先对单机进行性能测试,通过单机性能,结合业务场景估算集群环境的部署情况。
2.压力机
压力机可以起多个推拉流进程,每个进程可以模拟1000个以内的并发推拉流。
3.网络和负载均衡
服务器、压力机均部署在同一局域网内,局域网采用千兆网络,网络延迟可忽略不计。
4.测试视频文件
测试视频文件采用windows自带的示例高清视频wildlife.flv,视频相关参数为:
Audio: profile=LC, 2channels, 44100HZ
Video: profile=High, level=3.1, 1280x720
四、不同直播场景下测试解决方案
1.多人同时直播
多人同时直播实际上是多人同时向直播服务器进行推流,可使用SRS-Bench对单节点进行并发推流模拟场景,业界常用的推流协议为rtmp协议,使用sb_rtmp_publish -i /home/aaa.flv -c 1000 -r rtmp://X.X.X.X:1935/live/stream_1_{i}进行测试,要注意房间号的设置要将各个进程区分开,压力端执行sb_rtmp_publish后会打印出每个推流进程并发推流路数threads、成功路数alive、持续时长duration以及读写的流量等指标,服务端可使用netstat命令查看推流连接数,使用nmon工具可查看服务器资源使用情况,测试过程中使用拉流播放器随机抽取播放多路直播流验证推流成功情况及播放卡顿情况。
经过测试,当推流路数达到一定值后,资源消耗严重,连接数丢失,视频播放卡顿严重,建议单节点不超过3000路。
2.多人同时观看直播
多人同时观看直播时,若接入CDN,播放端选择就近的CDN节点进行拉流播放,此时拉流压力在CDN;若未接入CDN,播放端从直播源站进行拉流,因此可以使用sb_rtmp_load 进行测试。首先使用sb_rtmp_publish工具模拟1路推流至服务器,确认可播放后,执行命令sb_rtmp_load -c 1000 -r rtmp://X.X.X.X:1935/live/stream进行测试。经过测试,在基本保证效果的前提下,建议单节点并发拉流数不超过3000路。
3.混合场景
部分小型直播平台由于需求规模小,既不接入CDN,也不单独设定边缘节点Edge,直接使用源站既进行推流也进行拉流。这里对单节点进行500~1500路并发推拉流进行性能测试。
以500路并发推拉流为例,首先使用sb_rtmp_publish工具模拟500路推流至服务器,执行命令:
sb_rtmp_publish -i /home/aaa.flv -c 500 -r rtmp://X.X.X.X:1935/live/stream_{i},根据场景选择每路视频的拉流人数,脚本如下:
#! /bin/bash for i in {0..499} do nohup ./sb_rtmp_load -c 1 -r rtmp://X.X.X.X:1935/live/stream_{i} >load.log& done
经过测试,当1500路直播同时推拉流时,服务器处于严重中断负载,且实际播放效果严重卡顿,建议混合场景单节点不超过1500路。
4.直播录制
对于部分直播场景如培训、会议等,需要将现场直播视频保存以进行传播、留存等使用,有对直播进行录制的需求。首先对SRS服务器进行录制配置,在所用的vhost下配置dvr:
dvr { enabled on; dvr_path /nas/record/[app]/[stream].[timestamp].flv; dvr_plan session; }
重新加载SRS配置后,在压测端使用sb_rtmp_publish工具进行并发推流测试,录制场景除了进行服务器资源、连接数监控及直播流播放验证,还需监控录制文件大小以作为空间评估标准。
经过测试,录制消耗CPU比较严重,建议单节点推流录制不超过500路,每分钟录制文件大小为37.5M,可为磁盘空间提供参考。
五 结论
本文通过使用开源SRS-Bench性能测试工具对开源的SRS单机直播服务器进行性能测试,通过测试4个场景发现单机直播平台的能力,为后续直播平台上线预估资源、支撑能力打下坚实基础,提供有力支撑。
作者:艾明浩、贾秋菊
来源:51Testing软件测试网原创