smem
是一个工具,可以提供大量关于 Linux 系统内存使用情况的报告。与现有工具不同,smem 可以报告比例集大小 (PSS),它更有意义地表示虚拟内存系统中库和应用程序使用的内存量。由于大部分物理内存通常在多个应用程序之间共享,因此称为常驻集大小 (RSS) 的内存使用标准度量将大大高估内存使用。相反,PSS 衡量每个应用程序在每个共享区域中的公平份额,以给出一个现实的衡量标准。
Smem功能
- 系统概览列表
- 按进程、映射、用户输出
- 按进程、映射或用户过滤输出
- 来自多个数据源的可配置列
- 可配置的输出单位和百分比
- 可配置的标题和总计
- 从/proc读取实时数据
- 从目录镜像或压缩 tarball 中读取数据快照
- 用于嵌入式系统的轻量级捕获工具
- 内置图表生成
安装 smem
大多数发行版(Debian、Ubuntu、Mint、Fedora、CentOS RHEK 等)都有 smem 包,因此我们可以从发行版官方存储库轻松安装。对于 RHEL/CentOS 启用 epel 存储库。
- RHEL/CentOS
$ sudo yum install smem
$ sudo yum install python-matplotlib
- Fedora
$ sudo dnf install smem
$ sudo dnf install python-matplotlib
- Debian/Ubuntu
$ sudo apt-get install smem
$ sudo apt-get install python-matplotlib
如何使用 smem 命令
使用不带任何选项的 smem 命令
代码语言:javascript复制在上述命令的帮助下成功安装 smem 后。只需在终端上触发以下命令即可测量内存使用情况。
rumenz@local ~ $ smem
PID User Command Swap USS PSS RSS
2627 rumenz /usr/sbin/rfkill event 0 100 113 1352
2775 rumenz cat 0 96 152 1816
2776 rumenz cat 0 100 153 1764
2715 rumenz sh -c /usr/lib/linuxmint/mi 0 240 254 1572
2567 rumenz syndaemon -i 0 -t -K -R 0 316 365 2636
2415 rumenz /usr/bin/dbus-launch --exit 0 436 486 2580
2434 rumenz /usr/bin/dbus-daemon --conf 0 500 625 4024
2429 rumenz /usr/lib/at-spi2-core/at-sp 0 672 825 6076
2788 rumenz /usr/lib/x86_64-linux-gnu/g 0 716 865 5552
2517 rumenz /usr/lib/dconf/dconf-servic 0 796 874 4992
2538 rumenz /usr/lib/gvfs/gvfs-goa-volu 0 780 880 5540
2560 rumenz /usr/lib/gvfs/gvfs-mtp-volu 0 772 885 5884
2436 rumenz /usr/lib/at-spi2-core/at-sp 0 808 949 6564
2644 rumenz /usr/lib/gvfs/gvfsd-metadat 0 856 972 6000
...........
以 MB 为单位显示输出
代码语言:javascript复制默认情况下,内存使用输出显示
KB
可能会混淆的内容,添加 k 选项和 smem 以获取输出MB
。
rumenz@local ~ $ smem -k
PID User Command Swap USS PSS RSS
2627 rumenz /usr/sbin/rfkill event 0 10K 10K 3M
2775 rumenz cat 0 0K 10K 8M
2776 rumenz cat 0 10K 10K 7M
2715 rumenz sh -c /usr/lib/linuxmint/mi 0 20K 20K 5M
2567 rumenz syndaemon -i 0 -t -K -R 0 30K 30K 6M
2415 rumenz /usr/bin/dbus-launch --exit 0 40K 40K 5M
2434 rumenz /usr/bin/dbus-daemon --conf 0 50K 60K 9M
2429 rumenz /usr/lib/at-spi2-core/at-sp 0 60K 80K 9M
2788 rumenz /usr/lib/x86_64-linux-gnu/g 0 70K 80K 4M
2517 rumenz /usr/lib/dconf/dconf-servic 0 70K 80K 9M
2538 rumenz /usr/lib/gvfs/gvfs-goa-volu 0 70K 80K 4M
2560 rumenz /usr/lib/gvfs/gvfs-mtp-volu 0 70K 80K 7M
2436 rumenz /usr/lib/at-spi2-core/at-sp 0 80K 90K 4M
2644 rumenz /usr/lib/gvfs/gvfsd-metadat 0 80K 90K 9M
2502 rumenz /usr/lib/gvfs/gvfsd 0 80K 1M 2M
2785 rumenz /opt/google/chrome/chrome - 0 10K 1M 7M
.................
smem 显示总内存使用情况
代码语言:javascript复制甚至输出显示在 中
MB
,要使用 smem 获取总内存,请添加t
选项。
rumenz@local ~ $ smem -kt
PID User Command Swap USS PSS RSS
2627 rumenz /usr/sbin/rfkill event 0 10K 10K 3M
2775 rumenz cat 0 0K 10K 8M
2776 rumenz cat 0 10K 10K 7M
2715 rumenz sh -c /usr/lib/linuxmint/mi 0 20K 20K 5M
2567 rumenz syndaemon -i 0 -t -K -R 0 30K 30K 6M
2415 rumenz /usr/bin/dbus-launch --exit 0 40K 40K 5M
2434 rumenz /usr/bin/dbus-daemon --conf 0 50K 60K 9M
2429 rumenz /usr/lib/at-spi2-core/at-sp 0 60K 80K 9M
2788 rumenz /usr/lib/x86_64-linux-gnu/g 0 70K 80K 4M
2517 rumenz /usr/lib/dconf/dconf-servic 0 70K 80K 9M
2538 rumenz /usr/lib/gvfs/gvfs-goa-volu 0 70K 80K 4M
2560 rumenz /usr/lib/gvfs/gvfs-mtp-volu 0 70K 80K 7M
2436 rumenz /usr/lib/at-spi2-core/at-sp 0 80K 90K 4M
2644 rumenz /usr/lib/gvfs/gvfsd-metadat 0 80K 90K 9M
2502 rumenz /usr/lib/gvfs/gvfsd 0 80K 1M 2M
2785 rumenz /opt/google/chrome/chrome - 0 10K 1M 7M
.................
-------------------------------------------------------------------------------
57 1 0 3G 5G 8G
按用户报告内存使用情况
代码语言:javascript复制
通过使用smem 命令``u
添加选项,我们可以轻松地根据用户对内存使用情况进行排序。默认情况下,内存使用输出显示可能会混淆,所以我在每个输出上添加了选项,它将显示 .smem 中的 smem 输出。KB``k``MB
rumenz@local ~ $ smem -uk
User Count Swap USS PSS RSS
rumenz 57 0 5G 6G 9G
报告系统范围的内存使用摘要
代码语言:javascript复制rumenz@local ~ $ smem -wk
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 0G 8G 10M
userspace memory 7G 69M 0G
free memory 86M 86M 0
以百分比显示内存使用情况
代码语言:javascript复制rumenz@local ~ $ smem -p
PID User Command Swap USS PSS RSS
2627 rumenz /usr/sbin/rfkill event N/A 00% 00% 02%
2775 rumenz cat N/A 00% 00% 03%
2776 rumenz cat N/A 00% 00% 03%
2715 rumenz sh -c /usr/lib/linuxmint/mi N/A 00% 00% 03%
2567 rumenz syndaemon -i 0 -t -K -R N/A 01% 01% 05%
2415 rumenz /usr/bin/dbus-launch --exit N/A 01% 01% 04%
2434 rumenz /usr/bin/dbus-daemon --conf N/A 01% 01% 07%
2429 rumenz /usr/lib/at-spi2-core/at-sp N/A 01% 01% 10%
...................................
通过映射报告内存使用情况
代码语言:javascript复制rumenz@local ~ $ smem -p
Map PIDs AVGPSS PSS
/dev/nvidia0 3 0 0
/usr/lib/x86_64-linux-gnu/gconv/gconv-mo 33 0 0
/usr/lib/x86_64-linux-gnu/girepository-1 7 0 0
/usr/lib/x86_64-linux-gnu/girepository-1 6 0 0
/usr/lib/x86_64-linux-gnu/girepository-1 6 0 0
/usr/share/locale-langpack/en/LC_MESSAGE 11 0 0
/var/cache/fontconfig/0c9eb80ebd1c36541e 9 0 0
/var/cache/fontconfig/0d8c3b2ac0904cb8a5 9 0 0
/var/cache/fontconfig/14a5e22175779b556e 9 0 0
/var/cache/fontconfig/16c2fda60d1b4b719f 9 0 0
/var/cache/fontconfig/1ac9eb803944fde146 9 0 0
/var/cache/fontconfig/2171a34dccabdb6bcb 9 0 0
/var/cache/fontconfig/22368d551a680bfe5a 9 0 0
/var/cache/fontconfig/30829fa25452a46451 9 0 0
.......................
smem 数值输出
代码语言:javascript复制rumenz@local ~ $ smem -nk
PID User Command Swap USS PSS RSS
2627 1000 /usr/sbin/rfkill event 0 10K 10K 3M
2775 1000 cat 0 0K 10K 8M
2776 1000 cat 0 10K 10K 7M
2715 1000 sh -c /usr/lib/linuxmint/mi 0 20K 20K 5M
2567 1000 syndaemon -i 0 -t -K -R 0 30K 30K 6M
2415 1000 /usr/bin/dbus-launch --exit 0 40K 40K 5M
2434 1000 /usr/bin/dbus-daemon --conf 0 50K 60K 9M
2429 1000 /usr/lib/at-spi2-core/at-sp 0 60K 80K 9M
2788 1000 /usr/lib/x86_64-linux-gnu/g 0 70K 80K 4M
2517 1000 /usr/lib/dconf/dconf-servic 0 70K 80K 9M
2538 1000 /usr/lib/gvfs/gvfs-goa-volu 0 70K 80K 4M
2560 1000 /usr/lib/gvfs/gvfs-mtp-volu 0 70K 80K 7M
2436 1000 /usr/lib/at-spi2-core/at-sp 0 80K 90K 4M
2644 1000 /usr/lib/gvfs/gvfsd-metadat 0 80K 90K 9M
smem 生成图形输出
还可以使用 smem 生成图形图表来显示内存使用情况。按照以下步骤生成图形输出。
Smem 生成饼图
代码语言:javascript复制你现在可以使用 smem 以饼图的形式查看内存使用情况(USS、PSS 和 RSS)
rumenz@local ~ $ smem --pie name -s uss
image-20220212212106446