我正在尝试检测进程运行时是否存在内存泄漏 - 是否可以使用顶级 vmstat 等来执行此操作。我不想使用 valgrind 之类的工具,请在此处进行净化。
4 回答
我认为测试过程(嵌入式内存统计模块)+远程监控工具可以工作。
1) 就像 Joachim Pileborg 和 User1 所说,您的代码中需要一个嵌入式模块来计算内存统计信息。
2)但是为了方便,需要一个远程工具来监控,比如vmstat/top。而且我认为这个工具应该用这个嵌入式模块来开发。所以需要IPC机制。这是我认为的另一个话题。
3)有了上面的模块和工具,您可以软实时地从测试过程中获取信息,并且没有任何服务中断。
不,您无法使用 top 或 vmstat 检测内存泄漏。
top 和 vmstat 有各自的用途。top 有助于监控系统进程的总数及其状态(无论它们是正在运行还是等待)。
内存信息顶部显示,是系统范围的内存使用信息。它不会帮助您找出您的应用程序在哪里泄漏内存。
vmstat 也是一样的,但是它提供了更多关于系统内存使用的信息,帮助系统程序员弄清楚内存管理层是如何工作的。
内存分析 使用 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 计数之间的差异增加,则表明内存泄漏。