Linux监控工具介绍系列——smem
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
参考资料
http://www.uml.org.cn/itnews/2013121108.asp
https://linux.cn/article-4492-1.html
Linux监控工具介绍系列——smem的更多相关文章
- Linux监控工具介绍系列——OSWatcher Black Box
OSWatcher Balck Box简介 OSWatcher Black Box (oswbb)是Oracle开发.提供的一个小巧,但是实用.强大的系统工具,它可以用来抓取操作系统的性能指标,用 ...
- Linux监控工具介绍系列——vmstat
说来惭愧,玩Linux这么久了,居然没有玩转vmstat这个命令,对很多指标的具体意义都有点模糊不清,花了点时间好好学习.整理一下这个命令的相关资料.因为这个命令确实比较重要,而且频繁用到. 命令 ...
- Linux监控工具介绍系列——free
在Linux系统中,我们查看.监控系统内存使用情况,一般最常用的命令就是free.free命令其实非常简单,参数也非常简单,但是里面很多知识点未必你都掌握了.下面总结一下我所了解的free命令.如有不 ...
- Linux监控工具介绍系列——iostat
文章转自:https://www.cnblogs.com/ghj1976/p/5691857.html Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iost ...
- Linux系统性能监控工具介绍之-tsar
Linux系统性能监控工具介绍之-tsar Linux系统性能监控工具介绍之-tsar 2017-03-02 20:25 175人阅读 评论(0) 收藏 举报 分类: LINUX调优(9) 目 ...
- Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试【转】
Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试[转] 本文是本人前一段时间做一个简单Java监控工具调研总 ...
- linux磁盘管理系列-LVM的使用
LVM是什么 LVM是Linux操作系统的逻辑卷管理器. 现在有两个Linux版本的LVM,分别是 LVM1,LVM2.LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本. ...
- Linux 系统化学习系列文章总目录(持续更新中)
本页内容都是本人系统化学习Linux 时整理出来的.这些文章中,绝大多数命令类内容都是翻译.整理man或info文档总结出来的,所以相对都比较完整. 本人的写作方式.风格也可能会让朋友一看就恶心到直接 ...
- linux磁盘管理系列三:LVM的使用
磁盘管理系列 linux磁盘管理系列一:磁盘配额管理 http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...
随机推荐
- 彻底解决低端安卓手机touchend事件不触发(考虑scroll)
本次移动端开发时遇见了安卓4.2系统不能触发touchend的问题,有以下需求. 1. 横滑轮播图 2.下拉刷新页面内容 3.body滚动条不能失效 开始在轮播图touchmove事件中阻止了浏览器默 ...
- CSS表格溢出省略号代替及其他标签
box-shadow: 20px 20px 55px #777; // div阴影效果 filter:alpha(opacity=60) //设置透明度为60 opacity:0.6 //非IE浏览器 ...
- SFC的OAM管理框架
1.简介SFC Service Function Chain(SFC):一系列服务功能的顺序组合,主要是针对网络中的数据包/帧分类处理,还包括能够动态排序部署的网络功能并且这些网络功能间拓扑结构独立, ...
- 导入android-support-v4.jar的方法
在导入使用了ViewPage,ActionBar,Fragment的工程后出现错误,很有可能是没有导入4.0版本的支持包. 正确导入方法为: 首先在Project->properties-> ...
- knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页
Knockoutjs 是一个微软前雇员开发的前端MVVM JS框架, 具体信息参考官网 http://knockoutjs.com/ Web API数据准备: 偷个懒数据结构和数据copy自官网实例 ...
- Linux中mongodb安装和导出为json
采用官方工具导出mongo数据为json格式 文档:https://docs.mongodb.com/manual/reference/program/mongoexport/ 可以远程导出,只要有h ...
- linux全方位掌握一个命令--思路比方法更重要
Linux命令众多,当不清楚一个命令的使用方法时,我们该怎样了解命令的属性和帮助? 1.用type命令了解一个命令的属性 [root@zejin240 testdir]# type cd cd ...
- serviceStack.Redis 在PooledRedisClientManager 中设置密码
ServiceStack.Redis 是一个C#访问Redis的客户端,可以说可以通过它实现所有需要Redis-Cli的功能.但是今天我在主Redis 实例设置了访问密码,而在slave 上没有设置, ...
- SOA、ESB、NServiceBus、云计算 总结
SOA SOA 是通过功能组件化.服务化,来实现系统集成.解决信息孤岛,这是其主要目标.而更进一步则是实现更快响应业务的变化.更快推出新的应用系统.与此同时,SOA 还实现了整合资源,资源复用. SO ...
- C# EPL USB 指令打印
private void btnPrinter_Click(object sender, EventArgs e) { #region ESC 热敏图像点阵像素点读取打印 //Bitmap bitma ...