内存暴涨问题

发布于 2022-03-04 08:05:37 字数 296 浏览 862 评论 5

感谢各位读者百忙之中看我的问题!

工作中遇到一个内存暴涨的问题。有个进程A和另一个进程B进行rpc通信。进程B会每秒发送5000条数据给A,每条数据量为500字节左右。程序运行开始一分钟左右内存开始显著增长,基本是每2秒钟增长0.1G。一直增长直到B进程不再发送数据给A。停止发送后,内存也不会减少。

本来想通过valgrind进行内存泄漏分析,发现valgrind跑起来,导致数据量上不去,内存就不会暴涨了。猜测是valgrind启动程序使得性能损耗太大,导致数据量上不去。

进程B发送给A的数据是Json::Value格式的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

猫性小仙女 2022-03-11 07:18:48

没有delete 这个工具应该检查出来把 valgrind

百思不得你姐 2022-03-11 06:56:50

感谢各位的意见。问题意见找到了。是因为在B向A发送数据的依赖库new出一个event事件没有释放,虽然event结构体比较短(大概96字节),但上百万个(共100多M)没有释放的内存块没有释放导致ptmalloc管理的堆内存碎片化,最终导致内存降不下去。后面通过库的提供方把new出来的event事件给free掉,内存上升后,停止数据发送就降下来了。问题得以解决。再次感谢!

巡山小妖精 2022-03-11 06:38:40

B发送到A的时候判断一下   如果超过一定限制了就不发    等A处理的差不多了再发;考虑A用资源共享开启多个线程跑B发送过来的资源

吃颗糖壮壮胆 2022-03-11 06:10:16

从你的语境来判断应该是进程A内存暴涨,对吧。  首先找规律,内存增长速度与数据接收大小、频率的关系, 大概率是进程A在接收了数据以后的处理逻辑有问题。

苍暮颜 2022-03-11 00:42:12

进程A 处理json有资源没释放

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文