[SRS+docker]实现直播服务器4基于srs-bench搭建webRTC协
议拉流的压测环境
⽬录
1 前⾔
上⼀篇,已经完成了对基于webRTC协议的srs低延迟直播的研究。
上⼀篇:
这⼀篇来分享下,如何对srs直播服务器进⾏压⼒测试。因为压⼒负载的情况,决定了,实际部署的时候需要购买的服务器的数量,这个直接决定了成本的⾼与低。
经过查材料,srs-bench是⼀个⽐较成熟的,也是⽐较常⽤的直播压⼒测试⼯具。因此这⼀篇就来分享如何基于srs-bench来对srs直播服务器进⾏压测。
2 条件
2.1 服务器
压测服务器,单独起⼀台,不要跟直播服务器放同⼀台。所以我们单独再搭建⼀个cento7的容器。
需要注意的⼀点是:压测服务器⽆需开放任何端⼝,所以启动容器只要⽤最简单的启动命令即可:
docker run -d  --privileged=true xxxxxx /usr/sbin/init
2.2 编译环境
srs-bench是依赖c++的编译环境的,同时也依赖go的运⾏环境的,Srs-bench是基于go编写的,需要⽤到go环境。
因此需要在压测服务器上进⾏如下⼏个操作:
2.2.1 安装c++的编译环境
# 安装编译环境
yum -y install gcc gcc-c++
# 安装编译环境
yum install -y patch
# 安装编译环境
yum install -y unzip
# 安装编译环境
yum -y install gcc automake autoconf libtool make
# 安装 git
yum install -y git
2.2.2 安装go环境
请参考
3 srs-bench
3.1 官⽹
srs-bench针对不同协议的直播,提供了不同的⼯具,其中笔者⽤下来⼤致分成两套,第⼀套是测试webRTC协议的的,第⼆套是测试其他协议的直播:
上⾯两套测试⼯具,实质上同⼀个项⽬,只是针对不同的协议开了不同的分⽀⽽已。所以代码拉取之后,可以针对不同协议将代码切换到不同的分⽀即可:
测试webRTC协议的源码在 feature/rtc分⽀
测试其他协议(包含hls/flv协议)的源码在master分⽀
3.2 使⽤
因为上⼀篇我们已经搭建好了webRTC的直播服务器,所以我们就先来压测webRTC协议的直播服务器。
3.2.1 官⽹guide
使⽤过程,只要按照官⽹给的教程来操作即可,官⽹都有做了解释,不过官⽹给的步骤有⼀点问题:
上⾯圈起来的部分,是有问题的,总共是四条命令通过&&链接起来(因为使⽤测试webRTC协议的⼯具,所以将源码切换到feature/rtc 分⽀),如下:
git clone github/ossrs/srs-bench.git
git checkout feature/rtc
make
./objs/srs_bench -h
问题1
没有指定将srs-bench克隆到哪⾥。这个可能也不算问题吧,写guide的⼈,可能觉得⼤家应该都懂,我建议是:在执⾏这四句命令前,先执⾏命令:mkdir -p /home/git && cd /home/git
问题2
源代码clone下来之后,切换到feature/rtc之后,并没有将⽬录cd到srs-bench就直接make,这个是有问题的,因为当前还在srs-bench⽬录的上⼀级,直接make肯定失败。
问题3
clone过程压⼒很⼤,因为代码在github上,所以下载的时候有时候可以有时候不⾏。但是总的来说,如果clone失败的话,就重试,多试⼏次,肯定可以,⾄少,笔者在测试过程clone⼗⼏遍的结果都是成功,虽然有⼏次要尝试n次才成功。
3.2.2 测试⽤例说明
通过 ./objs/srs_bench -h命令,我们可以查看srs-bench提供了哪些压测的⼿段:
Usage: ./objs/srs_bench [Options]
Options:
-sfu    The target SFU, srs or janus. Default: srs
-nn    The number of clients to simulate. Default: 1
-sn    The number of streams to simulate. Variable: %d. Default: 1
-delay  The start delay in ms for each client or stream to simulate. Default: 50
-al    [Optional] Whether enable audio-level. Default: true
-twcc  [Optional] Whether enable vdieo-twcc. Default: true
-stat  [Optional] The stat server API listen port.
Player or Subscriber:
-sr    The url to play/subscribe. If sn exceed 1, auto append variable %d.
-da    [Optional] The file path to dump audio, ignore if empty.
-dv    [Optional] The file path to dump video, ignore if empty.
-pli    [Optional] PLI request interval in seconds. Default: 10
Publisher:
-pr    The url to publish. If sn exceed 1, auto append variable %d.
-fps    The fps of .h264 source file.
-
sa    [Optional] The file path to read audio, ignore if empty.
-sv    [Optional] The file path to read video, ignore if empty.
例如,1个播放,1个推流:
./objs/srs_bench -sr webrtc://localhost/live/livestream
./objs/srs_bench -pr webrtc://localhost/live/livestream - -sv avatar.h264 -fps 25
例如,1个流,3个播放,共3个客户端:
./objs/srs_bench -sr webrtc://localhost/live/livestream -nn 3
./objs/srs_bench -pr webrtc://localhost/live/livestream - -sv avatar.h264 -fps 25
例如,2个流,每个流3个播放,共6个客户端:
./objs/srs_bench -sr webrtc://localhost/live/livestream_%d -sn 2 -nn 3
./objs/srs_bench -pr webrtc://localhost/live/livestream_%d -sn 2 - -sv avatar.h264 -fps 25
例如,2个推流:
./objs/srs_bench -pr webrtc://localhost/live/livestream_%d -sn 2 - -sv avatar.h264 -fps 25
例如,1个录制:
./objs/srs_bench -sr webrtc://localhost/live/livestream - -dv avatar.h264
例如,1个明⽂播放:
./objs/srs_bench -sr webrtc://localhost/live/livestream?encrypt=false
3.2.3 压测
以 ./objs/srs_bench -sr webrtc://localhost/live/livestream -nn 3测试⽤例为例⼦:
⾸先localhost要改成srs服务器的ip,因为我们使⽤的是docker容器,所以我们要在srs所在的容器内部⾥头通过执⾏如下命令来获取当前的容器的ip:
/sbin/ip route|awk '/default/ { print $3 }'
其次,压测过程如何查看srs服务器的性能呢,有两种⽅式:
直接通过desktop提供的容器状态可视化看板,但是能看到的内容有限
通过docker ps命令来监测,监测的维度就⽐较多了
3.2.4 压测demo
搭建完srs-bench之后,笔者就实施了⼀波压测:
直播⼀个mp4⽂件:
压测结果如下:
服务器信息Docker 2cpu 2g i5-8400
测试⽤例测试结果现象单独html播放器页⾯打开
Webrtc 并发1000拉流Cpu飙升到190%,
内存到1.4g
并发还没跑完,服务器重启页⾯出不来
Webrtc 并发500 拉流Cpu飙升到180%-
190%,内存1.2g
并发跑完,但是持续不到5s,服务器重启,部分
线程掉线
页⾯出不来
Webrtc 并发400 拉流Cpu飙升到180%-
190%,内存1g
并发跑完,但是持续不到10s,服务器重启,⽆
线程掉线
页⾯等了很久才出来
Webrtc 并发300 拉流Cpu飙升到160%-docker重启容器命令
190%,内存950m
正常页⾯正常出来,并可以正常播放
Webrtc 并发200 拉流Cpu飙升到100%-
150%,内存830m
正常页⾯正常出来,并可以正常播放
通过上⾯的数据,可以得到如下结论:
单台的服务器是撑不住2000的并发拉流数。因此需要引⼊集。
4 总结
上⾯分享了如何通过srs-bench来压测srs服务器。因为实际的压测,要求将项⽬部署到⼲净的服务器
上,所以作者这边就没有进⾏系统性的压测。不过⽅法有了,实际要⽤的时候⾃然就没有什么问题了。
SRS问题
作者在搭建完srs-bench之后,也对srs进⾏了⼀波压测,压测过程也发现了srs的⼀个新问题:测试之后内存未完全释放掉。
经过研究,系srs本⾝的问题。
作者也正在努⼒查解决⽅案。
下⼀篇:srs服务器集部署

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。