内存暴涨问题
感谢各位读者百忙之中看我的问题!
工作中遇到一个内存暴涨的问题。有个进程A和另一个进程B进行rpc通信。进程B会每秒发送5000条数据给A,每条数据量为500字节左右。程序运行开始一分钟左右内存开始显著增长,基本是每2秒钟增长0.1G。一直增长直到B进程不再发送数据给A。停止发送后,内存也不会减少。
本来想通过valgrind进行内存泄漏分析,发现valgrind跑起来,导致数据量上不去,内存就不会暴涨了。猜测是valgrind启动程序使得性能损耗太大,导致数据量上不去。
进程B发送给A的数据是Json::Value格式的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
没有delete 这个工具应该检查出来把 valgrind
感谢各位的意见。问题意见找到了。是因为在B向A发送数据的依赖库new出一个event事件没有释放,虽然event结构体比较短(大概96字节),但上百万个(共100多M)没有释放的内存块没有释放导致ptmalloc管理的堆内存碎片化,最终导致内存降不下去。后面通过库的提供方把new出来的event事件给free掉,内存上升后,停止数据发送就降下来了。问题得以解决。再次感谢!
B发送到A的时候判断一下 如果超过一定限制了就不发 等A处理的差不多了再发;考虑A用资源共享开启多个线程跑B发送过来的资源
从你的语境来判断应该是进程A内存暴涨,对吧。 首先找规律,内存增长速度与数据接收大小、频率的关系, 大概率是进程A在接收了数据以后的处理逻辑有问题。
进程A 处理json有资源没释放