jhf*_*ntz 17 linux valgrind memory-leaks
我有一个linux x86应用程序,它使用各种第三方共享对象库.我怀疑这些库正在泄漏内存(因为它不可能是我的代码;-)
我尝试了值得信赖的Valgrind的,但因为死了可怕的死亡第三方库之一是使用一个不起眼的x86指令是Valgrind的未实现.
我找到了DUMA的推荐并尝试了一下(使用LD_PRELOAD技术在运行时引入DUMA),但它中止抱怨没有通过DUMA分配的内存上的自由操作(几乎可以肯定是由某些构造函数前面提到的第三方库中的静态对象).
是否有其他运行时可链接(或者不需要重新编译/重新链接)的工具可以在linux上运行?
该TotalView软件调试器(或者,更准确地说,它Memscope)具有类似Valgrind的的一个特性组合.
你也可以尝试电围栏(原作者的链接)(DUMA的起源)用于缓冲区溢出或免费触摸后的情况(但不是用于memleaks).
2020年,要查找Linux上的内存泄漏,您可以尝试:
对于 GCC(4.8 以上)和 Clang(3.1 以上),都可以使用地址清理器,很高兴该工具已在 Chromium 和 Firefox 等大型项目中被证明是有用的。它比 Valgrind 等其他旧替代品要快得多。
ASan会提供非常详细的内存区域信息,这对于分析泄漏非常有帮助。
ASan 的缺点:您需要使用选项构建程序-fsanitize=address;额外的内存成本要大得多。
TCmalloc 既可以与 LD_PRELOAD 一起使用,也可以直接链接到您的程序。结果可以使用pprof程序进行可视化,它具有漂亮的 Web UI 和控制台文本模式,如果地址清理程序不适用于您的环境,我建议使用它(如果您有一个非常旧的编译器或您的 PC 的内存非常有限)运行阿桑)。

TCmalloc也被用于大规模生产并被证明是稳健的。
Linux perf工具也可以用来查找内存泄漏,它是一个基于采样的工具。所以它不能很精确,但它仍然是帮助我们分析内存使用情况的一个很好的工具。
还有一个来自 bcc 工具的脚本。
./memleak -p $(pidof allocs)
        Trace allocations and display a summary of "leaked" (outstanding)
        allocations every 5 seconds
./memleak -p $(pidof allocs) -t
        Trace allocations and display each individual allocator function call
./memleak -ap $(pidof allocs) 10
        Trace allocations and display allocated addresses, sizes, and stacks
        every 10 seconds for outstanding allocations
./memleak -c "./allocs"
        Run the specified command and trace its allocations
./memleak
        Trace allocations in kernel mode and display a summary of outstanding
        allocations every 5 seconds
./memleak -o 60000
        Trace allocations in kernel mode and display a summary of outstanding
        allocations that are at least one minute (60 seconds) old
./memleak -s 5
        Trace roughly every 5th allocation, to reduce overhead
此类工具的优点:我们不需要重建我们的程序,因此它可以方便地分析一些在线服务。
| 归档时间: | 
 | 
| 查看次数: | 14897 次 | 
| 最近记录: |