前言

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

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

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

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

环境准备

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

需要用到的工具

  • valgrind
  • massif-visualizer

安装valgrind

yum install valgrind

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

下载massif-visualizer

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

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

不要漏了后面的nodeps

抓取ceph osd运行时内存数据

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

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

开始运行监控

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

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

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

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

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

查看截取的数据

命令行下的查看

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

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



图形界面的查看

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



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

[root@lab8106 ~]# massif-visualizer massif.out.21522
massif-visualizer(22494)/kdeui (kdelibs): Attempt to use QAction "toggleDataTree" with KXMLGUIFactory!
massif-visualizer(22494)/kdeui (kdelibs): Attempt to use QAction "toggleAllocators" with KXMLGUIFactory!
description: "(none)"
command: "/usr/bin/ceph-osd -f --cluster ceph --id 4"
time unit: "i"
snapshots: 56
peak: snapshot # 52 after "2.3138e+09i"
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. boost之asio

    asio asio是C++的准标准网络库,并且C++20标准库的网络部分将基于ASIO,需引入头文件#include <boost/asio.hpp>. ip地址 boost定义了表示ip ...

  2. 安装ipython

    安装ipython,首先系统上已安装python 在这里,我们已安装python3 在windows下: pip intsall ipython 在linux下: sudo apt install p ...

  3. 微信小程序项目wx-store代码详解

    这篇文章会很长,非常长,特别长,无敌长. 真的是挤牙膏般的项目进度,差不多是8月底有开始这个项目的想法,时至今日都1个多月了,抛去频繁的加班时间,王者时间,羽毛球时间...见缝插针的写这个项目,我竟然 ...

  4. RocketMQ扫盲篇

    本篇博客主要参考: <浅入浅出>-RocketMQ 敖丙 APACHE-RocketMQ Gitee RocketMQ官方文档 RocketMQ 实战与进阶 GitChat 又是好久没有写 ...

  5. 测试之-Jmeter使用

    一. 修改语言 修改 在 bin 目录下的 Jemeter.properties 二 . Jmeter主要元件 1.测试计划:是使用 JMeter 进行测试的起点,它是其它 JMeter测试元件的容器 ...

  6. python 微信小程序自动化

    微信小程序自动化 https://www.cnblogs.com/yyoba/python27 - FautoTesthttps://www.cnblogs.com/yyoba/p/9973731.h ...

  7. 从0实现python批量爬取p站插画

    一.本文编写缘由 很久没有写过爬虫,已经忘得差不多了.以爬取p站图片为着手点,进行爬虫复习与实践. 欢迎学习Python的小伙伴可以加我扣群86七06七945,大家一起学习讨论 二.获取网页源码 爬取 ...

  8. SSM中 web.xml配置文件

    <!--核心监听器 当tomcat(web容器,应用服务器,web服务器)启动的时候创建spring 工厂类对象,绑定到tomcat上下文中 --> <listener> &l ...

  9. C#之txt的数据写入

    一.背景 小伙伴们在使用C#开发时,可能需要将一些信息写入到txt,这里就给大家介绍几种常用的方法. 二.思路 2.1将由字符串组成的数组写入txt 此种方法不需要使用Flush和Close(). 如 ...

  10. javascript中的描述对象(Descriptor)获取和定义随笔

    最近再看了阮一峰的老师的ES6入门,发现一个有趣的东西,借此纪录以及整理下. 对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为.Object.getOwnPropertyD ...