前言
内存泄漏可以说是很典型的问题了,有一个好用的工具去排查内存泄漏是比较重要的。本文主要介绍的是gperftools这个工具。
gperftools这个工具比较轻量级,对源码是无侵入的,只需要重新链接即可。
接下来按照安装,以及使用两部分展开,最后再补充一个使用gperftools做性能分析的例子。
安装
ubuntu使用下面这个脚本就能直接安装了。跑完之后可以通过ls /usr/local/lib/ | grep tcmalloc
来确认是否安装成功。
|
|
内存泄漏
demo代码
以下demo代码想表达的意思是gperftools有能力检测出没有被释放的内存(heal_leak
函数里面有没有delete
的指针)。从中也可以看到,gperftools查内存泄漏对源码完全是无侵入的,只需要重新链接一下就可以了。
|
|
测试指令
|
|
结果
输出的heap_profile.pdf
长这个样子,可以很清晰地看到heap_leak
中没被释放的内存,而不包含heap_normal
中被正常释放的内存:
性能分析
demo代码
这里要注意的是代码里面加了一段dummy code,目的是使用profiler的代码,以保证正常链接。不加的话,对libprofiler.so
的链接有可能会被优化掉,导致最后profile失败。
这个跟链接器是强相关的,在有的机子上是不需要加的,这里写出来只是以防万一。
建议是先不加,然后通过ldd test
看是否有libprofiler.so
,如果有的话就不需要加dummy code了。
|
|
测试指令
|
|
结果
输出的cpu_profile.pdf
长这个样子: