我们的技术团队对Ti Top Streamer的性能做了严格的测试,从而得出了在各种硬件条件下、各个场景的测试数据。
一、先说一下基本结论:
Ti Top Streamer是一个性能卓越、可靠、稳定的流媒体服务器软件产品,其性能可以满足各种大并发、2K、4K等场景的业务需求,对物理内存占用极低。
注:经过我们对比测试,在CPU资源占用的表现上,Ti Top Streamer的表现略逊色于SRS 3.0。 主要是因为Ti Top Streamer 有更多的业务逻辑处理,以及相关管理功能。毕竟Ti Top Streamer是直接面向商业客户的商业产品。这一点,只要看看我们的管理界面和SRS的界面就会明白。
二、我们是如何测试的?
答案是:用Ti Top Streamer 测试 Ti Top Streamer!此外,用了一些nodejs脚本工具做为补充。对此,稍微做一点解释:
Ti Top Streamer 有丰富的HTTP API,用这些API可以创建大并发任务,举个简单的例子,假设测试500路rtmp流推送到Ti Top Streamer,你只需要用API给另一个Ti Top Streamer 创建500个转发任务,
转发的目的地址是你当前要测试的这台Ti Top Streamer!
调用这些API的脚本工具,你可以用任何语言去实现,我们采用了nodejs语言。它很简单,基本上,一个场景下的测试,用100来行nodejs代码就可以完成。
我们知道,流媒体服务器,有各种不同的应用场景。在不同场景下,业务流程不同,配置参数不同,这些势必会影响测试数据。比如是否启用HLS切片以及切片的长度,就会影响CPU和内存占用,而视频流的码率大小也会影响CPU和内存占用。
所以,首先要区分一下测试的技术场景:
- 1. 测试Ti Top Streamer 对RTMP流的接收能力
- 2. 测试Ti Top Streamer 对RTMP流的输出能力
- 3. 测试Ti Top Streamer 对HLS和FLV流的输出能力
RTMP流的输入,有两种方式,1)外部系统主动发起,用RTMP协议将流推送给Ti Top Streamer。2) Ti Top Streamer主动发起,根据一个RTMP URL从外部拉取这个RTMP流。
这两种方式下,对CPU、内存的消耗是一样的吗?是的。经过测试,两者几乎完全一样,差别只有1%左右,可以忽略不计。道理也简单,因为它们的区别只是信令发起方不一样(仅限于测试开始后的第一秒),其它环节完全一样。
在这个场景下,我们分别测试了启用HLS内存切片和不启用HLS内存切片,以及750Kbps码率和4Mbps码率的几种情况:
我们先来看最低硬件配置(2核4G内存)下的测试数据,见下表:
服务器硬件配置: 阿里云ecs.sn1ne.large (2核Intel 2.5GHz 4G内存 1Gbps网络带宽) CentOS7.4 64位系统 | ||||
测试目标:验证Ti Top Streamer支持的并发RTMP输入流数量 | ||||
测试方法:并发向Ti Top Streamer推rtmp流,测试时间:5分钟 | ||||
启用HLS内存切片: 否 | ||||
视频编码参数: 750Kbps 512*288 H.264/AAC | ||||
输入流数量 | CPU占用率 | 内存占用率 | 5分钟系统平均负荷 | 流入数据比特率均值 |
50路 | 11%~15% | 0.8% | 0.27 | 37Mbps |
100路 | 20%~26% | 1.3% | 0.65 | 74Mbps |
150路 | 31%~39% | 1.7% | 0.93 | 112Mbps |
200路 | 46%~53% | 2.1% | 0.95 | 148Mbps |
300路 | 68%~76% | 3.2% | 1.36 | 224Mbps |
注意:在我们所有的测试数据中,CPU占用率都不会超过80%,也就说,为了得到稳定而可靠的运行数据,我们不考虑CPU占用达到80%以上的情况。本文所有数据都采用了这个原则,下面不再赘述。
接下来,我们看看启用HLS内存切片后,资源占用会上升多少?
服务器硬件配置: 阿里云ecs.sn1ne.large (2核Intel 2.5GHz 4G内存 1Gbps网络带宽) CentOS7.4 64位系统 | ||||
测试目标:验证Ti Top Streamer支持的并发RTMP输入流数量 | ||||
测试方法:并发向Ti Top Streamer推rtmp流,测试时间:5分钟 | ||||
启用HLS内存切片: 是 (最大切片时长4秒,内存里保留最近的3个切片) | ||||
视频编码参数: 750Kbps 512*288 H.264/AAC | ||||
输入流数量 | CPU占用率 | 内存占用率 | 5分钟系统平均负荷 | 流入数据比特率均值 |
50路 | 14%~16% | 5.6% | 0.28 | 37Mbps |
100路 | 25%~31% | 10.8% | 0.49 | 74Mbps |
150路 | 38%~46% | 16.4% | 0.99 | 112Mbps |
200路 | 53%~60% | 20.9% | 1.12 | 148Mbps |
250路 | 68%~76% | 23.5% | 1.41 | 186Mbps |
注意:Ti Top Streamer在内存使用上,采用了Cache技术,也就是说会根据业务层面对内存的实际使用,动态地划定一个Cache范围,上面的内存数据实际是这个Cache的大小,真正业务层面使用的内存不到它的1/2。并且Cache的大小会依据业务情况动态调整。
接下来,我们再看看视频平均码率为4Mbps的情况(还是先禁用HLS内存切片),如下:
服务器硬件配置: 阿里云ecs.sn1ne.large (2核Intel 2.5GHz 4G内存 1Gbps网络带宽) CentOS7.4 64位系统 | ||||
测试目标:验证Ti Top Streamer支持的并发RTMP输入流数量 | ||||
测试方法:并发向Ti Top Streamer推rtmp流,测试时间:5分钟 | ||||
启用HLS内存切片: 否 | ||||
视频编码参数: 4Mbps 1920*1080 H.264/AAC | ||||
输入流数量 | CPU占用率 | 内存占用率 | 5分钟系统平均负荷 | 流入数据比特率均值 |
50路 | 50%~54% | 1.6% | 0.98 | 200Mbps |
70路 | 68%~77% | 1.8% | 1.22 | 280Mbps |
接下来,我们再看看启用HLS内存切片后,资源占用会上升多少?
服务器硬件配置: 阿里云ecs.sn1ne.large (2核Intel 2.5GHz 4G内存 1Gbps网络带宽) CentOS7.4 64位系统 | ||||
测试目标:验证Ti Top Streamer支持的并发RTMP输入流数量 | ||||
测试方法:并发向Ti Top Streamer推rtmp流,测试时间:5分钟 | ||||
启用HLS内存切片: 是 (最大切片时长4秒,内存里保留最近的3个切片) | ||||
视频编码参数: 4Mbps 1920*1080 H.264/AAC | ||||
输入流数量 | CPU占用率 | 内存占用率 | 5分钟系统平均负荷 | 流入数据比特率均值 |
50路 | 55%~61% | 23% | 1.02 | 200Mbps |
65路 | 72%~77% | 30% | 1.26 | 260Mbps |
从上面的数据看,在最低的硬件配置下(2核4G内存),Ti Top Streamer的性能表现还是很优秀的!
下面,我们把硬件配置上升一倍(4核8G内存),做同样的测试,看看Ti Top Streamer的表现如何:
服务器硬件配置: 阿里云ecs.sn1.large (4核Intel 2.5GHz 8G内存 1Gbps网络带宽) CentOS7.4 64位系统 | ||||
测试目标:验证Ti Top Streamer支持的并发RTMP输入流数量 | ||||
测试方法:并发向Ti Top Streamer推rtmp流,测试时间:5分钟 | ||||
启用HLS内存切片: 否 | ||||
视频编码参数: 750Kbps 512*288 H.264/AAC | ||||
输入流数量 | CPU占用率 | 内存占用率 | 5分钟系统平均负荷 | 流入数据比特率均值 |
50路 | 7%~9% | 0.4% | 0.31 | 37Mbps |
100路 | 13%~17% | 0.6% | 0.53 | 74Mbps |
200路 | 30%~33% | 1.0% | 1.22 | 148Mbps |
300路 | 39%~52% | 1.4% | 1.54 | 186Mbps |
400路 | 58%~68% | 1.8% | 1.87 | 296Mbps |
500路 | 69%~79% | 2.1% | 2.32 | 370Mbps |
接下来,我们看看启用HLS内存切片后,资源占用会上升多少?
服务器硬件配置: 阿里云ecs.sn1.large (4核Intel 2.5GHz 8G内存 1Gbps网络带宽) CentOS7.4 64位系统 | ||||
测试目标:验证Ti Top Streamer支持的并发RTMP输入流数量 | ||||
测试方法:并发向Ti Top Streamer推rtmp流,测试时间:5分钟 | ||||
启用HLS内存切片: 是 (最大切片时长4秒,内存里保留最近的3个切片) | ||||
视频编码参数: 750Kbps 512*288 H.264/AAC | ||||
输入流数量 | CPU占用率 | 内存占用率 | 5分钟系统平均负荷 | 流入数据比特率均值 |
50路 | 8%~11% | 2.3% | 0.35 | 37Mbps |
100路 | 17%~20% | 5.2% | 0.63 | 74Mbps |
200路 | 33%~39% | 10.4% | 1.34 | 148Mbps |
300路 | 48%~57% | 15.5% | 1.78 | 186Mbps |
400路 | 70%~75% | 23.5% | 2.25 | 296Mbps |
420路 | 72%~78% | 26% | 2.58 | 315Mbps |
接下来,我们再看看视频平均码率为4Mbps的情况(还是先禁用HLS内存切片),如下:
服务器硬件配置: 阿里云ecs.sn1.large (4核Intel 2.5GHz 8G内存 1Gbps网络带宽) CentOS7.4 64位系统 | ||||
测试目标:验证Ti Top Streamer支持的并发RTMP输入流数量 | ||||
测试方法:并发向Ti Top Streamer推rtmp流,测试时间:5分钟 | ||||
启用HLS内存切片: 否 | ||||
视频编码参数: 4Mbps 1920*1080 H.264/AAC | ||||
输入流数量 | CPU占用率 | 内存占用率 | 5分钟系统平均负荷 | 流入数据比特率均值 |
50路 | 32%~35% | 0.7% | 0.98 | 200Mbps |
70路 | 44%~49% | 0.8% | 1.23 | 280Mbps |
100路 | 63%~72% | 1.1% | 2.28 | 400Mbps |
110路 | 71%~78% | 1.2% | 2.45 | 440Mbps |
接下来,我们看看启用HLS内存切片后,资源占用会上升多少?
服务器硬件配置: 阿里云ecs.sn1.large (4核Intel 2.5GHz 8G内存 1Gbps网络带宽) CentOS7.4 64位系统 | ||||
测试目标:验证Ti Top Streamer支持的并发RTMP输入流数量 | ||||
测试方法:并发向Ti Top Streamer推rtmp流,测试时间:5分钟 | ||||
启用HLS内存切片: 是 (最大切片时长4秒,内存里保留最近的3个切片) | ||||
视频编码参数: 4Mbps 1920*1080 H.264/AAC | ||||
输入流数量 | CPU占用率 | 内存占用率 | 5分钟系统平均负荷 | 流入数据比特率均值 |
50路 | 36%~39% | 12.0% | 0.99 | 200Mbps |
70路 | 48%~56% | 15.1% | 1.34 | 280Mbps |
100路 | 69%~78% | 24.0% | 2.51 | 400Mbps |
以上,我们完成了对RTMP输入的测试,在最常见的低端硬件配置下(4核8G内存),Ti Top Streamer的性能表现达到了业界一流水平!
我们也总结了一点规律:
1). 启用HLS内存切片确实会显著增加对内存的占用,毕竟需要在内存中保存切片数据。但相对于我们常见的大内存服务器来说,这点内存占用微不足道。
2). 视频码率增大时,CPU占用率会有所提升,但提升的幅度有限。从750kbps到4Mbps,CPU占用率在原来的基础上只上升了不到10%。
3). 服务器硬件配置提升1倍后,支持的业务量,并不会跟着提升1倍,而只是提升了0.8倍左右。这个情况也可以理解,属于正常情况。