0

我正在尝试检测进程运行时是否存在内存泄漏 - 是否可以使用顶级 vmstat 等来执行此操作。我不想使用 valgrind 之类的工具,请在此处进行净化。

4

4 回答 4

0

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

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

2)但是为了方便,需要一个远程工具来监控,比如vmstat/top。而且我认为这个工具应该用这个嵌入式模块来开发。所以需要IPC机制。这是我认为的另一个话题。

3)有了上面的模块和工具,您可以软实时地从测试过程中获取信息,并且没有任何服务中断。

于 2013-04-27T05:52:07.397 回答
0

不,您无法使用 top 或 vmstat 检测内存泄漏。

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

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

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

于 2013-04-23T06:52:43.947 回答
0

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

您可以在程序中使用mallinfo()函数来检查使用了多少 malloc。

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

于 2013-04-23T06:53:22.357 回答
0

内存分析 使用 Perf 工具检查泄漏。

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

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

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

添加了新事件:probe_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$) sleep 4

输出:

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

11,312 探针库:免费

11,644 探针库:malloc

4.001091828 秒时间过去

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

于 2019-08-06T09:02:28.363 回答