前言

这个工具我第一次看到是在填坑群里面看到,是由研发-北京-蓝星同学分享的,看到比较有趣,就写一篇相关的记录下用法

火焰图里面也可以定位内存方面的问题,那个是通过一段时间的统计,以一个汇总的方式来查看内存在哪个地方可能出了问题

本篇是另外一个工具,这个工具的好处是有很清晰的图表操作,以及基于时间线的统计,下面来看下这个工具怎么使用的

本篇对具体的内存函数的调用占用不会做更具体的分析,这里是提供一个工具的使用方法供感兴趣的研发同学来使用

环境准备

目前大多数的ceph运行在centos7系列上面,笔者的环境也是在centos7上面,所以以这个举例,其他平台同样可以

需要用到的工具

  • valgrind
  • massif-visualizer

安装valgrind

  1. yum install valgrind

massif-visualizer是数据可视化的工具,由于并没有centos的发行版本,但是有fedora的版本,从网上看到资料说这个可以直接安装忽略掉需要的依赖即可,我自己跑了下,确实可行

下载massif-visualizer

  1. wget ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/linux/releases/23/Everything/x86_64/os/Packages/m/massif-visualizer-0.4.0-6.fc23.x86_64.rpm

安装massif-visualizer

  1. rpm -ivh massif-visualizer-0.4.0-6.fc23.x86_64.rpm --nodeps

不要漏了后面的nodeps

抓取ceph osd运行时内存数据

停掉需要监控的osd(例如我的是osd.4)

  1. [root@lab8106 ~]# systemctl stop ceph-osd@4

开始运行监控

  1. [root@lab8106 ~]# valgrind --tool=massif /usr/bin/ceph-osd -f --cluster ceph --id 4 --setuser ceph --setgroup ceph
  2. ==21522== Massif, a heap profiler
  3. ==21522== Copyright (C) 2003-2015, and GNU GPL'd, by Nicholas Nethercote
  4. ==21522== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
  5. ==21522== Command: /usr/bin/ceph-osd -f --cluster ceph --id 4 --setuser ceph --setgroup ceph
  6. ==21522==
  7. ==21522==
  8. starting osd.4 at :/0 osd_data /var/lib/ceph/osd/ceph-4 /var/lib/ceph/osd/ceph-4/journal
  9. 2017-08-10 16:36:42.395682 a14d680 -1 osd.4 522 log_to_monitors {default=true}

监控已经开始了,在top下可以看到有这个进程运行,占用cpu还是比较高的,可能是要抓取很多数据的原因

等待一段时间后,就可以把之前运行的命令ctrl+C掉

在当前目录下面就会生成一个【massif.out.进程号】的文件

  1. [root@lab8106 ~]# ll massif.out.21522
  2. -rw------- 1 root root 142682 Aug 10 16:39 massif.out.21522

查看截取的数据

命令行下的查看

  1. [root@lab8106 ~]# ms_print massif.out.21522 |less

这个方式是文本方式的查看,也比较方便,自带的文本分析工具,效果如下:



图形界面的查看

首先在windows上面运行好xmanager-Passive,这个走的x11转发的(也可以用另外一个工具MobaXterm)



运行好了后,直接在xshell命令行运行

  1. [root@lab8106 ~]# massif-visualizer massif.out.21522
  2. massif-visualizer(22494)/kdeui (kdelibs): Attempt to use QAction "toggleDataTree" with KXMLGUIFactory!
  3. massif-visualizer(22494)/kdeui (kdelibs): Attempt to use QAction "toggleAllocators" with KXMLGUIFactory!
  4. description: "(none)"
  5. command: "/usr/bin/ceph-osd -f --cluster ceph --id 4"
  6. time unit: "i"
  7. snapshots: 56
  8. peak: snapshot # 52 after "2.3138e+09i"
  9. peak cost: "16.2 MiB" heap "749.0 KiB" heap extra "0 B" stacks

然后在windows上面就会弹出下面的



就可以交互式的查看快照点的内存占用了,然后根据这个就可以进行内存分析了,剩下的工作就留给研发去做了

相关链接

linux – 如何测量应用程序或进程的实际内存使用情况?

总结

只有分析落地到数据层面,这样的分析才是比较精准的

变更记录

Why Who When
创建 武汉-运维-磨渣 2017-08-10

如何测量Ceph OSD内存占用的更多相关文章

  1. 一步步优化JVM四:决定Java堆的大小以及内存占用

    到目前为止,还没有做明确的优化工作.只是做了初始化选择工作,比如说:JVM部署模型.JVM运行环境.收集哪些垃圾回收器的信息以及需要遵守垃圾回收原则.这一步将介绍如何评估应用需要的内存大小以及Java ...

  2. Linux系统下输出某进程内存占用信息的c程序实现

    在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统/proc 计算某进程内存占用的程序实现方法. 首先, 为什么会有所谓的 伪文件 呢. Linu ...

  3. Linux系统内存占用90%以上 ?

    问题: [root@dbserver01 zx_epp_db]# free -m total used free shared buffers cached Mem: 15953 14706 1246 ...

  4. android应用内存占用测试(每隔一秒打印procrank的信息)

    1.内存占用 对于智能手机而言,内存大小是固定的:因此,如果单个app的内存占用越小,手机上可以安装运行的app就越多:或者说app的内存占用越小,在手机上运行就会越流畅.所以说,内存占用的大小,也是 ...

  5. 怎样使java程序减少内存占用(转载)

    本文收集网上关于减少java程序占用的一些小知识点 (1)别用new Boolean(). 在很多场景中Boolean类型是必须的,比如JDBC中boolean类型的set与get都是通过Boolea ...

  6. C# 处理应用程序减少内存占用

    SetProcessWorkingSetSize减少内存占用 系统启动起来以后,内存占用越来越大,使用析构函数.GC.Collect什么的也不见效果,后来查了好久,找到了个办法,就是使用 SetPro ...

  7. rabbitmq binary/other_system内存占用很高

    最近有台服务器的MQ应用占用内存比较偏高,如下: 但是看控制台本身内存中消息积压并不多, 查看rabbtmqctl发现,binary data和other data占据了绝大部分的内存,如下: {me ...

  8. Java线上应用故障排查之二:高内存占用

    搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java ...

  9. C# WinForm应用程序降低系统内存占用方法

    这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考: 1.使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多2.强制垃圾回收3.创建完对象实例后,记 ...

随机推荐

  1. day18 Pyhton学习 内置函数最后七个

    1. enumerate  枚举函数 for i in enumerate(['a','b','c'],1): print(i)#(1, 'a')(2, 'b')(3, 'c') goods_lst= ...

  2. python BeautifulSoup的使用方法

    BeautifulSoup的使用 我们学习了正则表达式的相关用法,但是一旦正则写的有问题,可能得到的就不是我们想要的结果了,而且对于一个网页来说,都有一定的特殊的结构和层级关系,而且很多标签都有id或 ...

  3. 这玩意比ThreadLocal叼多了,吓得why哥赶紧分享出来。

    这是why哥的第 70 篇原创文章 从Dubbo的一次提交开始 故事得从前段时间翻阅 Dubbo 源码时,看到的一段代码讲起. 这段代码就是这个: org.apache.dubbo.rpc.RpcCo ...

  4. ES5新增数组的方法

    ES5新增数组的方法 ES5新增数组常见方法(indexOf/forEach/map/filter/some/every) .indexOf( data , start)  检测数组中是否存在指定数据 ...

  5. PyTorch 中 weight decay 的设置

    先介绍一下 Caffe 和 TensorFlow 中 weight decay 的设置: 在 Caffe 中, SolverParameter.weight_decay 可以作用于所有的可训练参数, ...

  6. Vue.js 3.0搭配.NET Core写一个牛B的文件上传组件

    在开发Web应用程序中,文件上传是经常用到的一个功能. 在Jquery时代,做上传功能,一般找jQuery插件就够了,很少有人去探究上传文件插件到底是怎么做的. 简单列一下我们要做的技术点和功能点 使 ...

  7. Spring笔记(5) - 声明式事务@EnableTransactionManagement注解源码分析

    一.背景 前面详解了实现Spring事务的两种方式的不同实现:编程式事务和声明式事务,对于配置都使用到了xml配置,今天介绍Spring事务的注解开发,例如下面例子: 配置类:注册数据源.JDBC模板 ...

  8. 从Linux源码看TIME_WAIT状态的持续时间

    从Linux源码看TIME_WAIT状态的持续时间 前言 笔者一直以为在Linux下TIME_WAIT状态的Socket持续状态是60s左右.线上实际却存在TIME_WAIT超过100s的Socket ...

  9. STM32入门系列-STM32时钟系统,时钟使能配置函数

    之前的推文中说到,当使用一个外设时,必须先使能它的时钟.怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考<STM32F10x中文参考手册>"复位和时钟控制(RCC)&q ...

  10. 使用MQTT协议的4G DTU模块具有什么优势

    什么是MQTT协议 要了解使用MQTT协议的4G DTU模块具有哪些优势,首先我们需要了解什么是MQTT协议,MQTT协议最早是IBM开发的一个即时通讯协议,它的主要是为大量计算能力有限且工作在低带宽 ...