文章目录
- 安装
- 使用
- 使用`ceph tell`产生堆栈信息文
- 使用`pprof`工具分析内存及`ceph tell`释放内存
- 火焰图`FlameGraph`可视化进程堆栈信息
pprof是一个google开发的支持可视化、且可分析profile文件而达到对内存的分析。并且能够输出文本和图像来支持分析过程,pprof源码
安装
可以直接通过gperftools
工具集来安装pprop工具
配置海康yum源,然后执行:
yum install gperftools
yum install gperftools-devel
使用
该分析过程同样适用于其他二进制文件
使用ceph tell
产生堆栈信息文
- 启动Ceph默认的内存分析器
ceph tell mon.node1 heap start_profiler
- 打印内存分析器收集到的堆栈占用数据
ceph tell mon.node1 heap stats
- 将统计信息导出到文件
ceph tell mon.node1 heap dump
默认导出到/var/log/ceph/mon.node1.profile.0001.heap
使用pprof
工具分析内存及ceph tell
释放内存
- 分析一个文件:
pprof --text /usr/bin/ceph-mon /var/log/ceph/mon.node1.profile.0001.heap
产生如下输出:
(pprof) top10
Total: 2525 samples
298 11.8% 11.8% 345 13.7% runtime.mapaccess1_fast64
268 10.6% 22.4% 2124 84.1% main.FindLoops
251 9.9% 32.4% 451 17.9% scanblock
178 7.0% 39.4% 351 13.9% hash_insert
131 5.2% 44.6% 158 6.3% sweepspan
119 4.7% 49.3% 350 13.9% main.DFS
96 3.8% 53.1% 98 3.9% flushptrbuf
95 3.8% 56.9% 95 3.8% runtime.aeshash64
95 3.8% 60.6% 101 4.0% runtime.settype_flush
88 3.5% 64.1% 988 39.1% runtime.mallocgc
各个参数含义如下:
- The first column contains the direct memory use in MB. 函数本身使用的内存
- The fourth column contains memory use by the procedure and all of its callees.函数本身内存+调用函数内存
- The second and fifth columns are just percentage representations of the numbers in the first and fourth columns. 第二第五列分别为第一列,第四列与total的比值
- The third column is a cumulative sum of the second column.第三列为(到当前行数为止)第二列所有的和
- 对比堆文件:
pprof --text --base /var/log/ceph/mon.node1.profile.0001.heap /usr/bin/ceph-mon /var/log/ceph/mon.node1.profile.0003.heap
- 释放已经被
tcmalloc
占用但是没有被ceph占用的内存
ceph tell osd.0 heap release
- 一旦完成停止分析器
ceph tell osd.0 heap stop_profiler
火焰图FlameGraph
可视化进程堆栈信息
- 安装
下载FlameGraph到自己设备 - 进入该目录下获取当前进程堆栈信息 perf工具
perf record -F 99 -p 181 -g --sleep 60
perf record
表示采集系统事件,没有使用-e
指定,则默认采集(cpu clock
周期),-F 99
表示每秒99次,-p 181
表示针对当前进程进行分析,-g
表示记录调用栈,--sleep 60
表示收集60秒的信息
- 对生成的信息进行解析
perf script > out.perf
- 对解析出来的符号进行折叠
进入FlamGraph
目录,增加以下文件的运行权限
./stackcollapse-perf.pl out.perf > out.folded
- 生成火焰图
同样要增加该文件的运行权限,生成如下文件
./flamegraph.pl out.folded > kernel.svg