EasyDSS录像回看封面快照过多导致CPU占用高,如何优化?

2021-09-28 18:16:04 浏览数 (1)

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

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

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

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

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

   tool.Go(TimerSnap)
}

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

代码语言:javascript复制
// 添加到 snap 队列中
func AddSnap(msg *SnapMsg) {
   tool.Go(func() {
      if msg != nil {
         gSnapChan <- msg
      }
   })
}

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

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

0 人点赞