@TOC
一、smem命令介绍
smem
是一个用于Linux系统的命令行工具,它提供了比传统内存报告工具(如free
或top
)更为详细和高级的内存使用情况分析。smem
的关键特性是它能够报告 PSS(Proportional Set Size),这一指标在理解和分析现代多进程、特别是使用共享库和内存的系统中的内存消耗时更为准确。
二、smem命令的使用帮助
2.1 smem命令的help帮助信息
使用--help,查询
smem
命令的help帮助信息。
[root@jeven ~]# smem --help
Usage: smem [options]
Options:
-h, --help show this help message and exit
-H, --no-header disable header line
-c COLUMNS, --columns=COLUMNS
columns to show
-t, --totals show totals
-R REALMEM, --realmem=REALMEM
amount of physical RAM
-K KERNEL, --kernel=KERNEL
path to kernel image
-m, --mappings show mappings
-u, --users show users
-w, --system show whole system
-P PROCESSFILTER, --processfilter=PROCESSFILTER
process filter regex
-M MAPFILTER, --mapfilter=MAPFILTER
map filter regex
-U USERFILTER, --userfilter=USERFILTER
user filter regex
-n, --numeric numeric output
-s SORT, --sort=SORT field to sort on
-r, --reverse reverse sort
-p, --percent show percentage
-k, --abbreviate show unit suffixes
--pie=PIE show pie graph
--bar=BAR show bar graph
-S SOURCE, --source=SOURCE
/proc data source
2.2 smem命令的语法解释
选项 | 描述 |
---|---|
-h , --help |
显示帮助信息并退出 |
-H , --no-header |
不显示表头行 |
-c COLUMNS , --columns=COLUMNS |
指定显示的列 |
-t , --totals |
显示总计 |
-R REALMEM , --realmem=REALMEM |
设置物理RAM的总量 |
-K KERNEL , --kernel=KERNEL |
指定内核镜像路径 |
-m , --mappings |
显示内存映射信息 |
-u , --users |
按用户分组显示内存使用情况 |
-w , --system |
显示整个系统的内存使用情况 |
-P PROCESSFILTER , --processfilter=PROCESSFILTER |
使用正则表达式过滤进程 |
-M MAPFILTER , --mapfilter=MAPFILTER |
使用正则表达式过滤内存映射 |
-U USERFILTER , --userfilter=USERFILTER |
使用正则表达式过滤用户 |
-n , --numeric |
输出数值形式,不带单位 |
-s SORT , --sort=SORT |
指定排序依据的字段 |
-r , --reverse |
反转排序顺序 |
-p , --percent |
显示百分比 |
-k , --abbreviate |
显示单位后缀,如KB, MB, GB等 |
--pie=PIE |
显示饼状图 |
--bar=BAR |
显示柱状图 |
-S SOURCE , --source=SOURCE |
指定 /proc 数据源,用于获取内存使用信息 |
三、smem工具安装
3.1 安装epel
执行以下命令,安装epel源。
yum install -y epel-release
3.2 搜索smem包
执行以下命令,搜索smem包。
yum search smem
3.3 安装smem
直接使用yum安装smem包
yum install smem -y
四、smem命令的基本使用
4.1 查看内存概览
直接使用smem命令,将显示一个简要的内存使用概览,无参数时显示所有进程的内存使用情况。
smem
其中几个主要参数意思:
VSS
– Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)RSS
– Resident Set Size 实际使用物理内存(包含共享库占用的内存)PSS
– Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)USS
– Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
4.2 查看内存占用百分比
参数
-p
查看耗用内存情况的百分比, 这个命令会列出所有运行进程及其PSS值,按PSS大小降序排列,帮助识别内存消耗较高的进程。
smem -p
4.3 查看系统内存使用情况
使用以下命令,查看系统内存占用的整体情况。
[root@jeven ~]# smem -w
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 1330796 1018196 312600
userspace memory 1068992 228016 840976
free memory 5590492 5590492 0
4.4 显示单位后缀
可以使用
-k
选项,显示单位后缀。
[root@jeven ~]# smem -wk
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 1.3G 994.3M 305.5M
userspace memory 1.0G 222.7M 821.4M
free memory 5.3G 5.3G 0
4.5 对结果排序
使用以下命令,排序并显示内存使用最多的进程。
[root@jeven ~]# smem -rk --sort pss |head
PID User Command Swap USS PSS RSS
10396 polkitd mysqld --default-authentica 0 200.3M 200.3M 200.3M
10775 gdm /usr/bin/gnome-shell 0 106.2M 113.3M 130.8M
11900 root /data/fastgithub_linux-x64/ 0 99.3M 99.7M 101.7M
9546 root /usr/bin/dockerd -H fd:// - 0 68.0M 68.1M 69.3M
11218 102 /usr/sbin/mysqld --basedir= 0 48.9M 49.0M 49.9M
9336 root /usr/bin/containerd 0 47.6M 47.6M 48.1M
11920 root dnscrypt-proxy/dnscrypt-pro 0 17.0M 17.0M 17.0M
10714 root /usr/bin/X :0 -background n 0 10.9M 15.7M 23.1M
9345 root /usr/sbin/libvirtd 0 13.1M 14.3M 20.0M
五、显示图表
5.1 安装python
执行以下命令,安装python。
yum install python-matplotlib python-tk -y
5.4 显示饼状图和柱状图
生成一张进程的 PSS 和 RSS 值的条状图,纵坐标为每一个进程的 PSS 和 RSS 值,横坐标为 root 用户的所有进程(的 ID)
smem --userfilter="root" --bar pid -c"pss rss"
- 显示饼状图
smem --userfilter="root" --pie name
六、使用注意事项
在使用 smem
命令时,有几个注意事项可以帮助你更有效地利用这个工具并避免潜在的误解或错误。以下是几点重要的使用注意事项:
权限要求:通常,非根用户也可以运行
smem
来查看内存使用概况,但要获取更详细的进程信息(如特定用户的内存使用情况),可能需要提升至 root 权限。理解内存术语:
smem
使用了几个关键的内存度量标准,如 RSS(Resident Set Size)、PSS(Proportional Set Size)和 USS(Unique Set Size)。了解它们的含义对于正确解读报告至关重要。PSS 特别有用,因为它考虑了共享库的分配,提供了进程实际消耗内存的更准确视图。单位意识:使用
-k
选项来控制报告中的内存单位,确保你清楚当前的显示单位,以免对数值产生误解。实时性和准确性:虽然
smem
提供了详尽的内存使用信息,但它提供的快照反映了命令执行那一刻的系统状态。对于实时监控,可能需要定期运行smem
并对比结果。性能影响:在高负载系统上频繁运行
smem
(尤其是带有详细报告选项如--report top
)可能会对系统性能造成轻微影响,因为这涉及到收集和处理大量进程信息。内存类型区分:
smem
可以区分不同类型的内存使用(如物理内存、交换空间和内核缓冲/缓存),理解这些分类有助于深入分析系统内存状况。与其它工具结合使用:尽管
smem
功能强大,但在某些情况下,结合使用free
,top
, 或ps
等其他命令可以获得更全面的系统性能视图。更新与兼容性:确保你的
smem
版本是最新的,以便获得最佳功能和兼容性。旧版本可能缺少新特性和修复。输出解析:当输出被重定向或管道传输给其他程序时,注意格式设置(如 CSV 输出),并验证输出是否符合后续处理工具的预期格式。
文档与帮助:遇到疑问时,查阅
smem
的官方文档或使用man smem
查看手册页,可以提供更详细的命令选项和使用案例。