检测Linux上正在运行的进程的内存泄漏

时间:2013-04-23 06:42:32

标签: c linux memory-leaks

我正在尝试检测进程运行时是否存在内存泄漏 - 是否可以使用top vmstat等进行此操作。我不想使用像valgrind这样的工具,在这里进行净化。

4 个答案:

答案 0 :(得分:0)

没有。您无法使用top或vmstat检测内存泄漏。

顶部和vmstat有自己的目的。 top有助于监控系统进程及其状态的总数(无论它们是在运行还是在等待)。

内存信息顶部显示,是系统范围的内存使用信息。它无法帮助您弄清楚应用程序泄漏内存的位置。

vmstat也是一样,但是,它提供了有关系统内存使用的更多信息,这有助于系统程序员弄清楚内存管理层的工作方式。

答案 1 :(得分:0)

如果您不想使用工具程序,可以在程序中添加一些诊断程序:

您可以在程序中使用mallinfo()函数来检查malloc的使用量。

或者您可以使用mtrace()函数来使用malloc跟踪。

答案 2 :(得分:0)

我认为测试过程(嵌入式内存统计模块)+远程监控工具可以正常工作。

1)像Joachim Pileborg和User1所说,代码中需要一个嵌入式模块来计算内存统计数据。

2)但为方便起见,需要一个远程工具进行监控,如vmstat / top。我认为这个工具应该用这个嵌入式模块开发。因此需要IPC机制。这是我想的另一个话题。

3)使用上述模块和工具,您可以软实时地从测试过程中获取信息,而不会中断服务。

答案 3 :(得分:0)

内存配置文件 使用性能工具检查泄漏。

使用perf的探针的示例用法可能是检查libc的malloc()和free()调用:

  

$ perf探针-x /lib64/libc.so.6 malloc

     

$ perf探针-x /lib64/libc.so.6免费

添加了新事件: probe_libc:malloc(在0x7eac0上)

探针已创建。现在,让我们记录一下4秒钟内malloc和free在全球所有系统中的全局使用情况:

  

$性能记录-e probe_libc:malloc -agR sleep 4

     

$性能记录-e probe_libc:free -agR sleep 4

让我们在4秒钟内记录所有进程中malloc和free的使用情况:

  

$ perf stat -e probe_libc:free -e probe_libc:malloc -ag -p $ {pgrep $ process_name $)sleep4

输出:

  

进程ID'1153'的性能计数器统计信息:

     

11,312 probe_libc:免费

     

11,644́probe_libc:malloc

     

4.001091828秒的时间

如果每次执行perf命令时malloc和可用计数之间的差值增加,则表明存在内存泄漏。