我正在尝试检测进程运行时是否存在内存泄漏 - 是否可以使用top vmstat等进行此操作。我不想使用像valgrind这样的工具,在这里进行净化。
答案 0 :(得分:0)
没有。您无法使用top或vmstat检测内存泄漏。
顶部和vmstat有自己的目的。 top有助于监控系统进程及其状态的总数(无论它们是在运行还是在等待)。内存信息顶部显示,是系统范围的内存使用信息。它无法帮助您弄清楚应用程序泄漏内存的位置。
vmstat也是一样,但是,它提供了有关系统内存使用的更多信息,这有助于系统程序员弄清楚内存管理层的工作方式。
答案 1 :(得分:0)
答案 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和可用计数之间的差值增加,则表明存在内存泄漏。