smem工具介绍

smem是Linux系统上的一款可以生成多种内存耗用报告的命令行工具。与现有工具不一样的是smem可以报告实际使用的物理内存(PSS),这是一种更有意义的指标。可以衡量虚拟内存系统的库和应用程序所占用的内存数量。

由于大部分的物理内存通常在多个应用程序之间共享,名为实际使用物理内存(RSS)的这个标准的内存耗用衡量指标会大大高估内存耗用情况。PSS这个参数而是衡量了每个应用程序在每个共享内存区中的“公平分配”,给出了一个切合实际的衡量指标。

smem有许多功能特性:

系统概况列表

按进程、映射和用户列表

按用户、映射或用户过滤

来自多个数据源的可配置列

可配置的输出单位和百分比

可配置的标题和总和

从/proc读取活动数据

从目录镜像或经过压缩的打包文件读取数据快照

面向嵌入式系统的轻型捕获工具

内置的图表生成功能

smem的系统要求

系统内核为2.6.27以上

Python版本必须为2.4或以上

依赖matplotlib库生成图表(可选的,自动检测)依赖matplotlib,是因为smem除了一般的文本信息报告外,smem 也可以生成条状或饼状图。

对应的英文原文如下:

smem is a tool that can give numerous reports on memory usage on Linux systems. Unlike existing tools, smem can report proportional set size (PSS), which is a more meaningful representation of the amount of memory used by libraries and applications in a virtual memory system.

Because large portions of physical memory are typically shared among multiple applications, the standard measure of memory usage known as resident set size (RSS) will significantly overestimate memory usage. PSS instead measures each application's "fair share" of each shared area to give a realistic measure.

smem has many features:

system overview listing

listings by process, mapping, user

filtering by process, mapping, or user

configurable columns from multiple data sources

configurable output units and percentages

configurable headers and totals

reading live data from /proc

reading data snapshots from directory mirrors or compressed tarballs

lightweight capture tool for embedded systems

built-in chart generation

smem has a few requirements:

a reasonably modern kernel (> 2.6.27 or so)

a reasonably recent version of Python (2.4 or so)

the matplotlib library for chart generation (optional, auto-detected)

Linux使用到了虚拟内存(virtual memory),因此要准确的计算一个进程实际使用的物理内存就不是那么简单。只知道进程的虚拟内存大小也并没有太大的用处,因为还是无法获取到实际分配的物理内存大小。

RSS(Resident set size),使用top命令可以查询到,是最常用的内存指标,表示进程占用的物理内存大小。但是,将各进程的RSS值相加,通常会超出整个系统的内存消耗,这是因为RSS中包含了各进程间共享的内存。

PSS(Proportional set size)所有使用某共享库的程序均分该共享库占用的内存时,每个进程占用的内存。显然所有进程的PSS之和就是系统的内存使用量。它会更准确一些,它将共享内存的大小进行平均后,再分摊到各进程上去。

USS(Unique set size )进程独自占用的内存,它是PSS中自己的部分,它只计算了进程独自占用的内存大小,不包含任何共享的部分。

VSS – Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

RSS – Resident Set Size 实际使用物理内存(包含共享库占用的内存)

PSS – Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

USS – Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

smem工具安装

首先去官方网址https://www.selenic.com/smem/ 下载对应的smem安装包,目前最新的版本为smem-1.4.  下面安装是在RHEL 5.7上安装,不同版本系统、以及不同安装方法都有一些区别。

   1: [root@DB-Server tmp]# tar -xzvf smem-1.4.tar.gz 
   2: smem-1.4/.hg_archival.txt
   3: smem-1.4/.hgtags
   4: smem-1.4/COPYING
   5: smem-1.4/smem
   6: smem-1.4/smem.8
   7: smem-1.4/smemcap.c
   8: [root@DB-Server tmp]# cd smem-1.4
   9: [root@DB-Server smem-1.4]# ls
  10: COPYING  smem  smem.8  smemcap.c
  11: [root@DB-Server smem-1.4]# cp /tmp/smem-1.4/smem  /usr/bin
  12: [root@DB-Server smem-1.4]# chmod +x /usr/bin/smem

smem工具使用

查看smem命令的相关帮助信息

   1: [root@DB-Server tmp]# smem -h
   2: usage: smem [options]
   3:  
   4: options:
   5:   -h, --help            show this help message and exit
   6:   -H, --no-header       disable header line
   7:   -c COLUMNS, --columns=COLUMNS
   8:                         columns to show
   9:   -t, --totals          show totals
  10:   -R REALMEM, --realmem=REALMEM
  11:                         amount of physical RAM
  12:   -K KERNEL, --kernel=KERNEL
  13:                         path to kernel image
  14:   -m, --mappings        show mappings
  15:   -u, --users           show users
  16:   -w, --system          show whole system
  17:   -P PROCESSFILTER, --processfilter=PROCESSFILTER
  18:                         process filter regex
  19:   -M MAPFILTER, --mapfilter=MAPFILTER
  20:                         map filter regex
  21:   -U USERFILTER, --userfilter=USERFILTER
  22:                         user filter regex
  23:   -n, --numeric         numeric output
  24:   -s SORT, --sort=SORT  field to sort on
  25:   -r, --reverse         reverse sort
  26:   -p, --percent         show percentage
  27:   -k, --abbreviate      show unit suffixes
  28:   --pie=PIE             show pie graph
  29:   --bar=BAR             show bar graph
  30:   -S SOURCE, --source=SOURCE
  31:                         /proc data source

1:无参数时显示所有进程的内存使用情况

2:参数-u 显示每个用户所耗用的内存总量

smem -u

3: 参数-p 查看耗用内存情况的百分比。

smem -p

4: 参数-w 查看系统内存使用情况

   1: [root@DB-Server01 ~]# smem -w
   2: Area                           Used      Cache   Noncache 
   3: firmware/hardware                 0          0          0 
   4: kernel image                      0          0          0 
   5: kernel dynamic memory      22021892   21721584     300308 
   6: userspace memory            1899296     122424    1776872 
   7: free memory                  686340     686340          0 
   8: [root@DB-Server01 ~]# smem -w -p
   9: Area                           Used      Cache   Noncache 
  10: firmware/hardware             0.00%      0.00%      0.00% 
  11: kernel image                  0.00%      0.00%      0.00% 
  12: kernel dynamic memory        89.49%     88.27%      1.22% 
  13: userspace memory              7.73%      0.50%      7.23% 
  14: free memory                   2.78%      2.78%      0.00% 

5: 参数-R REALMEM,REALMEM这个值是指物理内存数量。此参数可以让smem在整个系统(-w)的输出中发现固件/硬件所耗用的内存数量(对比上下即可发现,注意firmware/hardware)

   1: [root@DB-Server01 ~]# smem -R 24G -w
   2: Area                           Used      Cache   Noncache 
   3: firmware/hardware            558296          0     558296 
   4: kernel image                      0          0          0 
   5: kernel dynamic memory      22024108   21722972     301136 
   6: userspace memory            1907676     122436    1785240 
   7: free memory                  675744     675744          0 

6:参数-c 用来显示需要展示的列。

   1: [root@DB-Server01 ~]# smem -c "name user pss"
   2: Name                     User          PSS 
   3: mingetty                 root           18 
   4: mingetty                 root           18 
   5: mingetty                 root           18 
   6: mingetty                 root           18 
   7: mingetty                 root           18 
   8: bash                     root          911 
   9: sftp-server              root          939 
  10: cupsd                    root         1208 
  11: rsyslogd                 root         1403 
  12: smbd                     tibco        1474 
  13: hald                     haldaemon     1477 
  14: pickup                   postfix      1487 
  15: vmtoolsd                 root         2309 
  16: sshd                     root         2521 
  17: python                   root         5464 
  18: beremote                 root         7585 
  19: java                     weblogic    18454 
  20: java                     weblogic    31431 
  21: java                     weblogic    69389 
  22: java                     tomcat     339977 
  23: java                     tomcat     355037 
  24: java                     tomcat     421133 
  25: java                     weblogic   640531 

7: 参数-s 根据某一列(例如 rss)来排序.

8: 参数-r 一般与参数-s结合使用,表示反转排序(从升序改为降序)

9:参数-M 过滤相关进程。Show processes filtered by mapping

   1: [root@DB-Server tmp]# smem -M mysql
   2:   PID User     Command                         Swap      USS      PSS      RSS 
   3:  4172 mysql    /usr/sbin/mysqld --basedir=        0     3924     3924     3924 
   4: [root@DB-Server tmp]# smem -M mysql -p
   5:   PID User     Command                         Swap      USS      PSS      RSS 
   6:  4172 mysql    /usr/sbin/mysqld --basedir=    0.00%    0.38%    0.38%    0.38% 
   7: [root@DB-Server tmp]# 

10:参数-U 按用户过滤信息

另外一些参数如何展示条状图或饼状图的功能,个人感觉这些参数的用处不大,首先服务器一般都没有安装桌面系统,都是命令界面维护、管理。无法生成相关图形。其次服务器有桌面系统,也需要安装相关依赖包,相当麻烦。除非是为了生成报告需要。

Read data from capture tarball smem --source capture.tar.gz

Show a bar chart labeled by pid smem --bar pid -c "pss uss"

Show a pie chart of RSS labeled by name smem --pie name -s rss

参考资料

https://www.selenic.com/smem/

http://www.uml.org.cn/itnews/2013121108.asp

https://linux.cn/article-4492-1.html

转发:http://www.cnblogs.com/kerrycode/p/5079319.html

Linux监控工具介绍系列——smem相关推荐

  1. Linux监控工具介绍系列——free`

    在Linux系统中,我们查看.监控系统内存使用情况,一般最常用的命令就是free.free命令其实非常简单,参数也非常简单,但是里面很多知识点未 必你都掌握了.下面总结一下我所了解的free命令.如有 ...

  2. JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta (Linux 如何查看进程的各线程的CPU占用 )

    http://dolphin-ygj.iteye.com/blog/366216 JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta 博客分类: 调优 ...

  3. 详细介绍Linux shell脚本系列基础学习(列表)

    本系列适合Linux初学者,属于Linux入门级教程,主要介绍了Shell的分类.语法格式以及脚本的使用和编写格式等. 不断更新中,是Shell学习的必读经典教程.现主要包含以下文章: Linux S ...

  4. 最牛B的Linux Shell命令 系列

    编者按 本文编译自commandlinefu.com的系列文章Top Ten One-Liners from CommandLineFu Explained.作为一个由用户推荐最有用shell命令的网 ...

  5. Linux网站架构系列之Apache----进阶篇

    本篇博文为Linux网站架构系列之apache的第二篇,我将带大家一起学习apache的编译参数,目录结构和配置文件等方面的知识,实现对apache服务的进一步掌握,并使之能更好的应用到生产实战中去. ...

  6. linux wireshark_4个好用的Linux监控工具

    作者 | Tate Galbraith 策划 | 万佳 本文介绍了作者常用的 4 个 Linux 监控工具,希望可以帮助读者提高生产力. 身为一个运维开发人员,如果你不知道眼下当前服务器底层操作系统中 ...

  7. linux驱动由浅入深系列:高通sensor架构实例分析之一

    点击打开链接 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析) linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构 ...

  8. linux shell 博客,【博客侠】Linux Shell脚本系列:开始上手(1)

    看标题大家应该知道,这是一个关于 Linux Shell 脚本的系列文章.通过本系列文章希望帮助 Linux 初学用户快速开始上手编写 Shell 脚本,能够利索的对脚本进行测试和使用. 在接下来的首 ...

  9. linux的静态编译elf无法调试,[翻译]自己动手编写一个Linux调试器系列之4 ELF文件格式与DWARF调试格式 by lantie@15PB...

    自己动手编写一个Linux调试器系列之4 ELF文件格式与DWARF调试格式 by lantie@15PB 在上一节中,你已经听说了DWARF调试格式,它是程序的调试信息,是一种可以更好理解源码的方式 ...

最新文章

  1. 图像配准----Harris算子
  2. React 项目--设置根目录(8)
  3. linux解码base64工具,如何解码Linux中的base64编码行?(How do I decode base64 encoded lines in linux?)...
  4. java threadsafe 注解_Java 注解详解
  5. 14-多对多关系建表
  6. 【LintCode题集】Q6、Q64
  7. ibm java英语面试_IBMJava英文面试题(附参考答案)
  8. 三、系统分层和分割策略
  9. Wireshark设置interface 时提示“There are no interfaces on which a capture can be done ”
  10. BZOJ4401: 块的计数 思维题
  11. 图书馆占座系统(二)
  12. html毕业答辩ppt,毕业论文答辩ppt(要求和制作技巧)
  13. pytorch 显存逐渐增大
  14. html实现跳跳棋游戏,原生JS实现的跳一跳小游戏完整实例
  15. 很多事情看似很完美,一不小心就成了杯具~
  16. oracle flash_back oracle闪回技术详解,oracle flashback 闪回技术实例
  17. 苹果开放降级_苹果新系统上线,只为M1芯片?
  18. (1)Kurento之WebRTC通信架构
  19. Python实时下载B站直播间视频(M3U8视频流)
  20. 【计算机毕业设计】45.医院挂号系统

热门文章

  1. 实例59:python
  2. 互联网大佬学历背景大揭秘,看看是你的老乡还是校友
  3. 0x00000000指令引用的内存不能为written_变量和内存访问
  4. dropdownlist三级联动怎么实现_一张表实现三级联动
  5. C语言实现排名算法和排位算法
  6. Shell 自定义函数
  7. Vertex and Fragment Shader
  8. SChema中group指示器的使用
  9. [另开新坑] 算导v3 #26 最大流 翻译
  10. hasLayout和filter滤镜的细节