centos下安装和使用gperftools

时间:2024-10-23 07:44:17

1.先安装libunwind,如果已经安装好 跳过这一步。

下载传送门Index of /releases/libunwind/

tar xvf libunwind-1.5.

cd libunwind-1.5.0

./configure --prefix=/use/local/ct3rd(自己要安装的路径)

这一步有可能会出错,报什么C编译器错误之类的  打开查看,一般会有这个错误,collect2: error: ld returned 1 exit status   这个是因为这个上一句有对应的库没有安装或者未找到,我这里是-lgcc_s.so没找到,运行 sudo find /usr/ -name libgcc_s.so看系统上有没有,有的话做个软链接到报错的目录。  先使用ld -lgcc_s --verbose 查看是在哪个目录没找到库,然后做个软链接过去  sudo ln -s /usr/lib/gcc/x86_64-redhat-linux/4.8.2/libgcc_s.so /usr/lib64/libgcc_s.so(没有这个错误就直接进行下一步)

如果编译时出现: 没有那个文件或目录错误,是因为自带的gcc版本太低,系统上如果有更高的gcc版本,使用 export CC="高版本gcc(完整路径)" export CXX="高版本g++(完整路径)"

make && make install

运行sudo yum search libunwind 找到自己系统对应可以安装的libunwind-dev

我这里是运行 sudo yum install libunwind-devel.x86_64

2.安装gperftools

下载gperftools,传送门/gperftools/gperftools/releases

解压 tar xvf gperftools-2.

cd gperftools-2.8

./configure --prefix=/use/local/ct3rd(自己要安装的路径)

如果上一步出现configure: WARNING: No frame pointers and no libunwind. Using experimental backtrace capturing via libgcc. Expect crashy cpu profiler错误,那是因为没有安装libunwind库,回到第一步操作一遍

make && make install

现在就可以使用profiler来分析了

1.在你的程序编译链接时加上参数 -lprofiler

比如你的程序是 test

g++ -o test -lprofiler

2.然后启动时

CPUPROFILE=/home/ct/ ./test -p 12003 ...

                (要生成的文件位置) (运行程序 后面是程序带的参数,没有就不用写)

如果你的程序带-lprofiler参数编译不通过,可以试试这种方式直接启动

LD_PRELOAD=/home/ct/code/lib/ CPUPROFILE=/home/ct/ ./test -p 12003 ...

3.生成之后运行

pprof test --text >

这样就生成可以查看cpu使用情况的文档,也可以生成可视化文件,需要先安装

sudo yum install graphviz

sudo yum install graphviz gv

pprof --svg --inuse_objects --lines --edgefraction=1e-10 --nodefraction=1e-10 test >

查看内存泄露方法基本同上

1.编译时加上链接参数 -ltcmalloc,然后启动

HEAPCHECK=normal ./

2.如果你的程序带-ltcmalloc参数编译不通过,可以试试这种方式直接启动

LD_PRELOAD="/home/ct/code/lib/" HEAPCHECK=normal ./

如果有内存泄漏会程序结束后会提示你那里有泄漏,类似下面这样

3.然后pprof --text tmp /tmp/.26624._main_ > 生成分析文件

也可以按照下面的提示生成可视化文件,看的更清楚 不过要先安装依赖的库

没有安装会报错 sh: dot: 未找到命令

sudo yum install graphviz

sudo yum install graphviz gv

我的上面不能使用gv格式,我最后使用的是下面的命令

pprof --svg --inuse_objects --lines --edgefraction=1e-10 --nodefraction=1e-10 tmp "/tmp/.26624._main_" > svg_asy.svg

然后用chrome打开svg_asy.svg就可以看到图形化的泄露地方 非常明显

使用堆检查,方法与查看内存泄漏基本相同,只是启动时有区别

=tmp ./

(堆分析文件前缀)

2.如果你的程序带-ltcmalloc参数编译不通过,可以试试这种方式直接启动

LD_PRELOAD="/home/ct/code/lib/" HEAPPROFILE=tmp ./

3.最后会生成类似tmp.,tmp.的等等文件,随便挑一个可以就可以生成可视化文件去观察堆的情况

pprof --text tmp. >   生成txt文档

pprof --svg --inuse_objects --lines --edgefraction=1e-10 --nodefraction=1e-10 tmp "/tmp/.26624._main_" > svg_asy.svg  生成可视化文件,用浏览器打开