【问题标题】:Memory Leak Suspicion内存泄漏嫌疑
【发布时间】:2013-11-18 17:03:20
【问题描述】:

我的系统上运行着一个守护进程(C 程序)。 当守护程序启动时,许多其他库会附加到此守护程序。

还有另一个用户进程在运行时使用此守护进程进行操作。

问题是在用户进程完成其操作后,当我看到该守护程序的 top 命令的输出时,我看到“RES”内存以 MB 为单位增加。 %mem 降低到我运行该进程之前的水平。

  PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND          
 7456 root      20   0 73946  34m 3543 S      0  0.3  14:28.96 test_daemon            

RES 值的增加是否预示着内存泄漏?

【问题讨论】:

  • RES的增加并不一定意味着内存泄漏,可能是加载动态库造成的。
  • 你可以用valgrind这样的东西来检查它
  • 感谢大家的回复。但这种 RES 值的增加并不是固定的。有时它会超过 100 MB。我认为,如果是由于共享库加载,那么内存增加不应限制在某个值或固定。无论如何,如果任何库中有一些内存分配,那么它将增加该守护程序的内存消耗。我说的对吗?
  • 运行 valgrind,您的所有问题都会得到解答,而不是仅仅通过查看顶部来猜测可能会发生什么。
  • 我检查了 valgrind,它报告了大约 0.5 MB 的泄漏,这与 34MB 的 RES 值不一致。所以我猜RES中看到的34 MB可能不是泄漏。我的理解正确吗?

标签: c linux memory-leaks


【解决方案1】:

不一定,也可能没有。但是,确保您的代码没有内存泄漏的唯一方法是使用 Valgrind (http://valgrind.org/) 之类的东西运行它。当您可以使用实际的内存调试器并确定时,为什么还要使用 top?

【讨论】:

    猜你喜欢
    • 2017-06-25
    • 2016-06-26
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多