我的代码中有内存泄漏。堆继续随着流的触发而增加。 在我的代码中,我有一个while(1)循环,基本上等待队列。 当从webservice触发该流时,传入的msg被推入队列,并且调用c ++中的方法,该方法接收消息并实现以图形形式的流。
对于每个触发器,我发现堆中的604kb内存会增加。我需要解决这个问题。
我停止了服务[在prod中运行的二进制文件]。
我用valgrind启动了服务[将二进制文件作为valgrind的输入]
valgrind --log-file=/home/valgrind-output.txt --leak-check=full <service binary>
但是当二进制文件正在运行时它没有显示任何泄漏,只有当我停止服务时才会看到一些泄漏。但是这些是一次性泄漏并且一旦我们重新启动服务就会被清除。[二进制]。
我有意在每个流程触发时在流程开始时添加了一个分配。
int *p = new int[10];
并添加了一个日志。我每次触发一个流程时都会看到日志打印。但是我没有看到valgrind在输出文件中发现任何泄漏。
如何检查每次流量调用之间的泄漏? valgrind是否仅在调用main结束后才泄漏泄漏?如何动态检查我的代码在这种情况下导致的泄漏。 如果还有其他需要安装的探测器?请建议。这会很有帮助。谢谢。
答案 0 :(得分:1)
valgrind仅在程序退出时检查内存泄漏。此时它会跟踪从堆栈和全局变量可到达的所有内存,并且任何无法访问的内容都被视为泄漏。
如果你想在长时间运行的程序中找到泄漏,你需要插入一个调用退出(中止程序),该调用将在运行一段时间后发生,并且它将显示泄漏的内容点。
答案 1 :(得分:-2)
使用-massif它为您提供详细的输出,其中内存被分配给所有调用堆栈。