近期我们更新了最新的EasyNVR测试版本,有不少用户已经在用最新版本进行项目上的测试,同时我们也接到一些反馈称该版本EasyNVR在使用过程中如果转码的话,会导致内存一直增长且难以下降,也就是我们常说的内存泄露。
在解决转码模块malloc内存没有free导致内存泄漏的问题后,我们发现官网EasyNVR演示平台依然存在长期运行后内存一直增长的问题。

除了转码模块,仍然存在其他线程存在占用内存问题,导致NVR长期运行内存增长。查看EasyNVR的pprof分析,发现在ws-flv的数据发送线程有大量的内存占用情况。


查看这部分代码后发现,后端对ws-flv发送后的出错信息没有做任何处理。从而导致后台在前端断开web socket连接后仍然没有退出线程,数据无法发送全部缓存在待发送的readbytes缓存中。

解决该问题需要对web socket发送返回错误码进行判断,在确保在前端推出websoket连接后,后端能够正确的结束发送线程。参考代码如下:

关于内存占用,我们之前也解决过EasyGBS内的相关问题:EasyGBS快照拉流频繁占带宽及内存怎么解决。大家有兴趣可以了解一下。更多视频相关解决方案,欢迎联系我们了解。
本文探讨了最新EasyNVR版本的内存问题,着重于转码模块的内存泄露和WebSocket线程管理改进。通过pprof分析,作者揭示了ws-flv数据发送线程内存占用问题,并提供了修复代码示例。此外,还提及了与EasyGBS类似内存优化经验分享。
264

被折叠的 条评论
为什么被折叠?



