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 生成可视化文件,用浏览器打开