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.DFS96 3.8% 53.1% 98 3.9% flushptrbuf95 3.8% 56.9% 95 3.8% runtime.aeshash6495 3.8% 60.6% 101 4.0% runtime.settype_flush88 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
本文主要是在梳理cephfs内核方式挂载的内核代码逻辑所做的准备 环境:Centos 7.5 内核源码版本:3.10.0-862.el7.x86_64 打开ceph模块的debug信息 单独编译ceph模块的.ko文件 ceph在内核的通用模块主要有三个: ceph.ko 模块路径:/usr/src/kernels/3.10....
目前有两种动态修改的方式来让ceph中各个组件的配置生效,所以介绍如下两种方式方便我们进行功能或者代码的调试 使用ceph daemon方式修改 ceph daemon osd.0 help用于osd的daemon服务ceph daemon mon.ceph-node1 help用于mon的admin socket命令、ceph...
我们内核挂载的前提是:看到centos7.5 中默认内核3.10.0-862.11.6.el7.x86_64的挂载fs执行文件读写性能更优良,所以尝试将3.10.0-862.11.6.el7.x86_64模块中与ceph fs挂载相关的ceph.ko,libceph.ko,dns_resolver.ko,libcrc32c.ko拷贝...
更多内容,欢迎关注微信公众号:全菜工程师小辉~前言在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,彻底搞懂NIO效率高的原理。这篇博客将针对第三个原因,进行更详细的讲解。首先澄清,零拷贝与内存直接映射并不是Java中独有的概念,并且这两个技术并不是等价的。零拷贝零拷贝是指避免在用户态(User-space)...
一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器...
我的爱机是一台ThinkPad T420,原装三星DDR 1333 4G内存一根,还剩一根内存位置,最近趁京东6.18促销,准备增加一根物理内存。为了确保兼容性,觉得仍然选购DDR 1333 4G内存,于是购买了金士顿这款,比如DDR3 1600的还贵。 这个安装过程完全参照该内存的网页提示进行 这里简单记录一下,以备...
陪伴我多年的老本ThinkPad T420渐渐垂垂老矣, 我想更新一下可以更新的部分, 比如将2.5寸HDD更换为SSD, 将单条4G内存再增加一根, 凡此种种想法, 可能最后归结为如何获取该笔记本的硬件配置信息, 在windows下面使用鲁大师之类的检测软件, 也许很好搞定,但是在Ubuntu 14.04平台上如果办到呢? 很简单...
一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库, 在一个.cpp主文件中,即用new又用malloc来动态分配内存, 可能会导致内存错误.后来网上调研和查资料发现, new和mal...