文章目录
- 安装
- 使用
- 使用`ceph tell`产生堆栈信息文
- 使用`pprof`工具分析内存及`ceph tell`释放内存
- 火焰图`FlameGraph`可视化进程堆栈信息
pprof是一个google开发的支持可视化、且可分析profile文件而达到对内存的分析。并且能够输出文本和图像来支持分析过程,pprof源码
安装
可以直接通过
gperftools
工具集来安装pprop工具
配置海康yum源,然后执行:
yum install gperftools
yum install gperftools-devel
使用
该分析过程同样适用于其他二进制文件
使用 ceph tell
产生堆栈信息文
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
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
-
安装
下载FlameGraph到自己设备
- 进入该目录下获取当前进程堆栈信息 perf工具
perf record -F 99 -p 181 -g --sleep 60
-
对生成的信息进行解析
perf script > out.perf
-
对解析出来的符号进行折叠
进入
FlamGraph
目录,增加以下文件的运行权限
./stackcollapse-perf.pl out.perf > out.folded
-
生成火焰图
同样要增加该文件的运行权限,生成如下文件
./flamegraph.pl out.folded > kernel.svg