问题描述:分别在两个虚拟机ubuntu上跑c++编写的服务端程序和客户端程序,发现在服务端程序存在内存泄漏问题,当开启iperf使得客户端的流量特别大的时候,服务端程序CPU占比达到100%,内存每分钟增长0.5%,大概运行了4分钟,从1.5%增长到了10%。服务端程序和客户端程序基本是对称的,但是只有服务端程序存在比较大的内存泄漏现象。
使用第三方工具valgrind检查结果是:possibly lost : 864 byte in 3 blocks,其他的项不存在内存泄漏,得到的有问题的代码定位很模糊,是在main函数开启线程池的一段代码上,如下所示
pool tp(3);
检查了一遍代码逻辑,感觉看不出什么问题,所以想请教园内的大佬有没有什么方法可以实现内存泄漏的比较精确的代码定位。
第二天:发现 possibly lost : 864 byte in 3 blocks 的结果 应该是threadpool 创建的线程池由于主程序异常退出而产生的内存泄漏,所以运行过程中程序并没有产生内存泄漏。但是这又无法解释程序运行过程中,数据量传输过大一直以 264byte 的增量一直增长,难道是因为程序在运行过程中,接收缓存一直增大,但未及时清理,同时还是能通过全局变量获取相应的数据结构?