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

举报
TSINGSEE青犀视频 发表于 2021/10/12 10:27:35 2021/10/12
【摘要】 以上代码以前并未添加 time.Sleep(1 * time.Second),实际使用过程中发现,仍然会导致 cpu 突然飙高。在大量数据运行的时候,确实出现飙高的操作,因此添加适当的沉睡时间,解决突然飙高一段时间的问题。

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

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

因此我们需要对该代码进行优化调整,以前的代码逻辑是接收前端请求,则进行截图操作,这样后台会开启 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青犀视频全线产品均有演示平台供参考,用户可以进入演示平台阅览界面,也有测试版本供大家下载测试,若大家有兴趣可以联系我们进行测试。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。