监控视频录像回看封面快照过多导致CPU占用高,如何优化?
【摘要】 以上代码以前并未添加 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)