heaptrack是kde的内存调试工具,我们在定位内存泄漏的时候,为了方便定位可以安装此工具来排查,下面是heaptrack的使用方法
安装方式如下
apt install heaptrack heaptrack-gui libheaptrack
heaptrack不需要太多的参数支持,直接heaptrack追加需要监控的进程即可,如下
heaptrack ./ukui-tablet-desktop
因为我们调试内存泄漏的时候,大概是知道泄漏的点或者行为,此时进入程序触发泄漏行为即可。当泄漏出现的时候,我们关掉程序,可以在当前目录获得名字为heaptrack.name.pid.gz
类似的文件,此时直接加载此调试文件即可,如下
直接使用heaptrack_gui即可,如下
heaptrack_gui /home/kylin/heaptrack.ukui-tablet-desktop.29058.gz
此时我们可以看到图片如下
这里已经大概告诉你泄漏的函数原因了,可以继续追代码了。
如果我们需要看详细的统计数据,我们可以跳转到Flame Graph中,当然任何内存泄漏都有一定阈值,我们可以设置Cost Threshold即可,这里设置10%。如下所示
这里就直接看到超过10%的Cost的调用,直接就能看出原因。
虽然上面可以查看到简单的内存泄漏,但是内存泄漏是长期的,我们需要长时间盯着内存的消耗增长,那么我们可以挂机72小时后,在Consumed中查看其增长情况,如下。
此时如果是长时间挂机,内存不是趋于平稳,那么就说明内存泄漏比较明显了。否则我们只能说内存会被一定情况下被使用。
至此,我们基于heaptrack能够很方便的定位内存泄漏问题了,它不同于valgrind,大型的程序使用valgrind会导致性能十分低下,不方便排查问题。而像kde这种大型qt项目或其他,heaptrack是一个非常不错的选择。