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

C 检测Linux上正在运行的进程的内存泄漏,c,linux,memory-leaks,C,Linux,Memory Leaks,我试图在进程运行时检测它是否存在内存泄漏-是否可以使用top-vmstat等进行检测。我不想使用像valgrind、purify这样的工具 否。使用top或vmstat无法检测内存泄漏 top和vmstat有自己的用途。top有助于监视系统进程总数及其状态(无论是正在运行还是正在等待) 内存信息顶部显示的是系统范围内存使用信息。它不会帮助你找出你的应用程序在哪里泄漏内存 vmstat也是一样的,但它提供了有关系统内存使用的更多信息,这有助于系统程序员了解内存管理层是如何工作的。如果您不想使用工具

我试图在进程运行时检测它是否存在内存泄漏-是否可以使用top-vmstat等进行检测。我不想使用像valgrind、purify这样的工具

否。使用top或vmstat无法检测内存泄漏

top和vmstat有自己的用途。top有助于监视系统进程总数及其状态(无论是正在运行还是正在等待)

内存信息顶部显示的是系统范围内存使用信息。它不会帮助你找出你的应用程序在哪里泄漏内存


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

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

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

或者您可以使用函数使用malloc跟踪。

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

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

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


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

内存评测 使用性能工具检查泄漏

perf探针的一个示例用法是检查libc的malloc()和free()调用:

$perf probe-x/lib64/libc.so.6 malloc

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

新增活动: 探测libc:malloc(在0x7eac0上)

已创建一个探测。现在,让我们在4秒内记录整个系统中malloc和free的全局使用情况:

$perf record-e probe_libc:malloc-agR sleep 4

$perf record-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$)睡眠4

输出:

进程id“1153”的性能计数器统计信息:

11312探针库:免费

11644探针libc:malloc

4.001091828秒经过的时间


如果每次运行perf命令时malloc和free count之间的差异增加,则表明内存泄漏。

您可以自己随时跟踪它。拥有自己的
malloc
/
免费的
包装器,用于跟踪分配的位置,并定期打印分配列表,或至少打印分配的总金额。可能有用,只需使用链接-
mallinfo()
这些天或多或少都是无用的。请参阅
manmallinfo
BUGS
部分。