EasyDSS录像回看封面快照过多导致CPU占用高优化方案

本文讲述了EasyDSS视频直播/点播服务平台在处理大量录像快照时导致CPU过载的问题。通过优化代码,引入消息队列和适当延迟解决了这一问题。具体措施是在初始化快照模块时创建一个通道,并在接收到前端请求时将截图任务放入队列,避免了开启过多进程。通过添加适当的沉睡时间,成功防止了CPU突然飙高的情况。

EasyDSS是TSINGSEE青犀视频云边端架构中支持RTMP协议前端设备的视频直播点播平台,除了网页直播和点播外,也支持视频录像,录像一般根据录像计划设定即可。

录像1.png

EasyDSS 录像回看页面中,会实时生成所有录像的封面快照,该功能在录像非常多的情况下,会生成大量的快照,导致服务器cpu达到 100%,最终系统后台崩溃,无法运行。

image.png

因此我们需要对该代码进行优化调整,以前的代码逻辑是接收前端请求,则进行截图操作,这样后台会开启 n 个截图进程,导致 cpu 飙高,因此优化在队列中进行切图操作。

首先在初始化快照模块的时候,创建一个 gSnapChan 通道,当通道中有新的切图信息后,则进行切图操作。参考代码如下:

// 初始化快照切换模块
func InitSnap() {
   tool.Go(func() {
      for snapMsg := range gSnapChan {
         SnapTs(snapMsg)
         time.Sleep(1 * time.Second)
      }
   })

   tool.Go(TimerSnap)
}

添加到队列中的代码如下:

// 添加到 snap 队列中
func AddSnap(msg *SnapMsg) {
   tool.Go(func() {
      if msg != nil {
         gSnapChan <- msg
      }
   })
}

以上代码以前并未添加 time.Sleep(1 * time.Second),实际使用过程中发现,仍然会导致 cpu 突然飙高。在大量数据运行的时候,确实出现飙高的操作,因此添加适当的沉睡时间,解决突然飙高一段时间的问题。

EasyDSS视频直播/点播服务平台诞生至今,我们做了不少版本的功能更新和升级,除EasyDSS外,TSINGSEE青犀视频全线产品均有演示平台供参考,用户可以进入演示平台阅览界面,也有测试版本供大家下载测试,若大家有兴趣可以联系我们进行测试。

DSS7.png

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值