linux用smem分析内存占用情况
在 也看linux内存去哪儿了 篇中大致了解了linux内存大的分类,同时为了精确计算,在 精确计算rss使用值 篇中又使用简单的shell 计算将RSS项内存做了计算。本篇继续对内存的使用做一个探讨,本篇着重推荐一个工具smem 。smem 是一个python写的内存查看工具,源代码只有700行不到。功能却非常强大,其可以按进程、映射和用户列表显示内存使用情况,并支持正则匹配;而且可以百分比形式显示;同时支持使用matplotlib以图形的方式展示。
一、安装
smem程序的官网为:http://www.selenic.com/smem ,可以直接从官网下载tar.gz包,下载下来之后就可以支持复制其中的smem程序使用。如下:
1# cd /tmp/
2# wget http://www.selenic.com/smem/download/smem-1.4.tar.gz
3# tar xvf smem-1.4.tar.gz
4# cp /tmp/smem-1.4/smem /usr/local/bin/
5# chmod +x /usr/local/bin/smem
该压缩包内还其其他可用文件:
1[root@361way smem-1.4]# tree
2.
3├── COPYING
4├── smem
5├── smem.8
6└── smemcap.c
其中smem程序就是我们主要介绍的程序,smemcap.c是一个数据捕获程序的源文件,其支持要一台机器上捕获包后在另一台上进行分析,这个后面会提到。smem.8为man帮助文件,可以使用下列命令查看:# groff -Tascii -man smem.8
,也可以将该文件压缩后放到man目录,以后就可以通过man smem查看帮助文档了。
1# gzip smem.8
2# cp smem.8.gz /usr/share/man/man8
二、参数
smem相关参数如下:
1# report
2-m, --mappings Report memory usage by mapping.
3-u, --users Report memory usage by user.
4-w, --system Report systemwide memory usage summary.
5# Filter
6-M MAPFILTER, --mapfilter=MAPFILTER Mapping filter regular expression.
7-P PROCESSFILTER, --processfilter=PROCESSFILTER Process filter regular expression.
8-U USERFILTER, --userfilter=USERFILTER User filter regular expression.
9# 输出格式
10-c COLUMNS, --columns=COLUMNS Columns to show.
11-H, --no-header Disable header line.
12-k, --abbreviate Show unit suffixes.
13-n, --numeric Show numeric user IDs instead of usernames.
14-p, --percent Show percentages.
15-r, --reverse Reverse sort.
16-s SORT, --sort=SORT Field to sort on.
17-t, --totals Show totals.
18# 输出图形
19--bar=BAR Show bar graph.
20--pie=PIE Show pie graph.
在输出结果中常见的有几个参数USS、PSS、RSS ,其代表的意义如下:
- RSS : resident set size (ignoring sharing)
- PSS : proportional set size (including sharing)
- USS : unique set size
- VSS : virtual set size (total virtual memory mapped)
USS代表非共享内存被报告为进程独自占用的物理内存,USS + 进程的共享内存使用比例 = 实际使用的物理内存(PSS)。
三、输出示例
常用的是使用-u查看用户的内存使用情况、-w查看内存大的分类情况、-p以百分比形式查看。
注意-w选面,上面使用-R与不使用-R的区别,我建议使用选项-R REALMEM,这个值是指物理内存数量。这让smem可以在整个系统(-w)的输出中发现固件/硬件所耗用的内存数量。如果提供该选项,它还可以用作百分比所用到的总内存大小。
使用-t 会汇总统计,也可以使用-r进行反向排序,将使用内存最大的进程放在最上面。使用正则过虑显示ntp和www用户内存使用情况的示例如下:
其他常见的用法如下:
Show basic process information | smem |
---|---|
Show library-oriented view | smem -m |
Show user-oriented view | smem -u |
Show system view | smem -R 4G -K /path/to/vmlinux -w |
Show totals and percentages | smem -t -p |
Show different columns | smem -c “name user pss” |
Sort by reverse RSS | smem -s rss -r |
Show processes filtered by mapping | smem -M libxml |
Show mappings filtered by process | smem -m -P evolution |
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 |
四、使用图形显示
使用图形显示时,需要借助matplotlib库,可以使用yum -y install python-matplotlib安装该库。
显示带“pss”和“uss”这两列的条形图(命令smem –bar pid -c “pss uss” ),显示效果如下图:
创建饼形图,显示在运行系统上以“k”开头的进程(命令:smem -P ‘^k’ –pie=name ):
五、smemcap抓取与分析
除此之外,smem还支持通过将其他主机的内存信息捕获放到文件中,将该文件到复制某台主机上进行分析。最上面提到的smemcap.c源文件就是做这个用的,使用gcc编译成二进制文件即可。
11. Compile smemcap.c for your target system.
22. Run smemcap on the target system and save the output:
3 smemcap > memorycapture.tar
43. Copy the output to another machine and run smem on it:
5 smem -S memorycapture.tar
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/smem-memory/5014.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.