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