EasyNVR长期运行播放ws-flv导致线程大量占用且内存增加处理方法
Posted EasyNVR
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyNVR长期运行播放ws-flv导致线程大量占用且内存增加处理方法相关的知识,希望对你有一定的参考价值。
近期我们更新了最新的EasyNVR测试版本,有不少用户已经在用最新版本进行项目上的测试,同时我们也接到一些反馈称该版本EasyNVR在使用过程中如果转码的话,会导致内存一直增长且难以下降,也就是我们常说的内存泄露。
在解决转码模块malloc内存没有free导致内存泄漏的问题后,我们发现官网EasyNVR演示平台依然存在长期运行后内存一直增长的问题。
除了转码模块,仍然存在其他线程存在占用内存问题,导致NVR长期运行内存增长。查看EasyNVR的pprof分析,发现在ws-flv的数据发送线程有大量的内存占用情况。
查看这部分代码后发现,后端对ws-flv发送后的出错信息没有做任何处理。从而导致后台在前端断开web socket连接后仍然没有退出线程,数据无法发送全部缓存在待发送的readbytes缓存中。
解决该问题需要对web socket发送返回错误码进行判断,在确保在前端推出websoket连接后,后端能够正确的结束发送线程。参考代码如下:
关于内存占用,我们之前也解决过EasyGBS内的相关问题:EasyGBS快照拉流频繁占带宽及内存怎么解决。大家有兴趣可以了解一下。更多视频相关解决方案,欢迎联系我们了解。
以上是关于EasyNVR长期运行播放ws-flv导致线程大量占用且内存增加处理方法的主要内容,如果未能解决你的问题,请参考以下文章
EasyPlayer播放不了EasyNVR分发的ws-flv流地址怎么处理?
EasyNVR级联到EasyNVS,控制台请求无报错,WS-FLV视频无法播放是什么原因?