近期我们更新了最新的EasyNVR测试版本,有不少用户已经在用最新版本进行项目上的测试,同时我们也接到一些反馈称该版本EasyNVR在使用过程中如果转码的话,会导致内存一直增长且难以下降,也就是我们常说的内存泄露。
在解决转码模块malloc内存没有free导致内存泄漏的问题后,我们发现官网EasyNVR演示平台依然存在长期运行后内存一直增长的问题。
除了转码模块,仍然存在其他线程存在占用内存问题,导致NVR长期运行内存增长。查看EasyNVR的pprof分析,发现在ws-flv的数据发送线程有大量的内存占用情况。
查看这部分代码后发现,后端对ws-flv发送后的出错信息没有做任何处理。从而导致后台在前端断开web socket连接后仍然没有退出线程,数据无法发送全部缓存在待发送的readbytes缓存中。
解决该问题需要对web socket发送返回错误码进行判断,在确保在前端推出websoket连接后,后端能够正确的结束发送线程。参考代码如下:
关于内存占用,我们之前也解决过EasyGBS内的相关问题:EasyGBS快照拉流频繁占带宽及内存怎么解决。大家有兴趣可以了解一下。更多视频相关解决方案,欢迎联系我们了解。