valgrind massif vgdb 排查内存泄露问题
前言
Valgrind中的memcheck工具也能排查内存泄露,但是主要是用于排查分配与释放不匹配,少释放或多释放等问题。
但是如果一个模块不断的申请内存,但是从来没释放造成的内存堆积,用memcheck就检测不出来了。此时需要使用massif。
massif的基础原理是隔一段时间拍一个内存快照,通过对比不同快照间的差距,分析出那些模块内存在不断上涨。
代码量大(百万行)时,使用massif产生快照文件会用很长时间。所以本文使用massif +vgdb的方式来排查。
使用方法
运行massif
窗口一执行以下命令:
valgrind --tool=massif --max-threads=5000 --vgdb=yes --vgdb-error=0 your_exe
命令执行完后窗口会提示如果用vgdb调试
运行gdb
新开一个窗口二执行以下命令:
gdb your_exe
target remote | /usr/bin/valgrind/libexec/valgrind/../../bin/vgdb --pid=18190 #此处的pid与窗口一显示的的那个要匹配
c #继续执行
产生快照
窗口二运行一段时间后ctrl+c并执行以下命令产生快照
monitor all_snapshots all.out
分析快照
新开一个窗口三执行ms_print 分析快照
ms_print all.out>> all.txt
打开all.txt,将多个快照信息进行对比即可找出哪个堆栈的内存在不断上升。
其他
Ubuntu 上有massif-visualizer 工具可以对快照信息可视化。但是代码量大、业务复杂是,用这玩意感觉并不直观。不太推荐。
参考信息:
valgrind massif内存分析_liweigao01的专栏-CSDN博客_massif
valgrind massif检查长期闲置堆积致使的内存泄露 - 尚码园
Linux下内存检测工具:asan_Hansen的博客-CSDN博客_asan内存检测
Linux gcc自带检测内存泄漏工具asan_TSZ0000的博客-CSDN博客_asan gcc
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
