首页 > pprof搭配ceph tell命令分析ceph内存

pprof搭配ceph tell命令分析ceph内存

文章目录

        • 安装
        • 使用
          • 使用`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.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...