编辑
2025-04-30
记录知识
0
请注意,本文编写于 58 天前,最后修改于 58 天前,其中某些信息可能已经过时。

目录

安装
监听内存泄漏
打开分析界面
总结

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

此时我们可以看到图片如下

2025-04-30_09-51-45.png

这里已经大概告诉你泄漏的函数原因了,可以继续追代码了。

如果我们需要看详细的统计数据,我们可以跳转到Flame Graph中,当然任何内存泄漏都有一定阈值,我们可以设置Cost Threshold即可,这里设置10%。如下所示

2025-04-30_09-54-57.png

这里就直接看到超过10%的Cost的调用,直接就能看出原因。

虽然上面可以查看到简单的内存泄漏,但是内存泄漏是长期的,我们需要长时间盯着内存的消耗增长,那么我们可以挂机72小时后,在Consumed中查看其增长情况,如下。

2025-04-30_09-58-10.png

此时如果是长时间挂机,内存不是趋于平稳,那么就说明内存泄漏比较明显了。否则我们只能说内存会被一定情况下被使用。

总结

至此,我们基于heaptrack能够很方便的定位内存泄漏问题了,它不同于valgrind,大型的程序使用valgrind会导致性能十分低下,不方便排查问题。而像kde这种大型qt项目或其他,heaptrack是一个非常不错的选择。