如何检测应用程序是否泄漏内存?

时间:2013-05-02 05:51:38

标签: linux memory-leaks

我有一个非常复杂的系统,有30个应用程序正在运行。一个相当复杂的C ++应用程序泄漏了内存,我想我已修复它。

到目前为止我所做的是:

  • 我使用valgrind's memcheck执行了应用程序,但没有发现任何问题。
  • 我使用htop监控应用程序,我注意到虚拟和剩余内存没有增加
  • 我计划运行valgrind's massif并查看它是否使用新内存

问题是,我怎样才能确保没有泄漏?我想如果虚拟内存停止增加,那么我可以确定没有泄漏。当我测试我的应用程序时,我会触发分配内存的循环并多次取消分配以确保。

3 个答案:

答案 0 :(得分:0)

除非您确切了解应用程序分配新内存的所有条件,否则您无法确定。如果你不能诱导所有这些条件,valgrind和htop都不能保证你的应用程序在任何情况下都不会泄漏内存。

然而,你应该至少确定应用程序在正常情况下不会泄漏内存。

答案 1 :(得分:0)

如果valgrind没有报告泄漏,则不再存在内存区域的泄漏(在您检查的运行期间)。这并不意味着程序不会分配内存,使用它并且在它不再使用它时不会释放它(但它仍然可以访问)。想想例如在典型的待办事项堆栈中,您将新项目置于顶部,在顶部处理项目,然后再推送另一个项目。永远不会回到旧的,所以用于它们的内存被浪费了,但从技术上讲它不是泄漏。

您可以做的是监控进程的内存使用情况。如果它稳步增加,那么可能会出现问题(无论是真正的泄密,还是某些不需要增长的数据结构)。

如果这不是真的很紧迫,从长远来看可能会更便宜,只是让它成为......

答案 2 :(得分:-1)

您需要使用名为Valgrind的工具。它是用于Linux和Mac OS X操作系统的内存调试,内存泄漏检测和分析工具。 Valgrind是一个灵活的程序,用于调试和分析Linux可执行文件。 按照步骤..

只需安装valgrind

要跑...... ./a.out arg1 arg2

现在如何使用此命令行打开详细的内存泄漏检测器: valgrind --leak-check = yes ./a.out arg1 arg2 valgrind --leak-check = yes / path / to / myapp arg1 arg2

或者  您还可以设置日志文件: valgrind --log-file = output.file --leak-check = yes --tool = memcheck ./a.out arg1 arg2

您可以检查其日志是否有内存泄漏错误... cat output.file