Linux中统计进程内存使用的神器

2022-06-02 19:01:43 浏览数 (1)

smem是一个工具,可以提供大量关于 Linux 系统内存使用情况的报告。与现有工具不同,smem 可以报告比例集大小 (PSS),它更有意义地表示虚拟内存系统中库和应用程序使用的内存量。

由于大部分物理内存通常在多个应用程序之间共享,因此称为常驻集大小 (RSS) 的内存使用标准度量将大大高估内存使用。相反,PSS 衡量每个应用程序在每个共享区域中的公平份额,以给出一个现实的衡量标准。

Smem功能

  • 系统概览列表
  • 按进程、映射、用户输出
  • 按进程、映射或用户过滤输出
  • 来自多个数据源的可配置列
  • 可配置的输出单位和百分比
  • 可配置的标题和总计
  • 从/proc读取实时数据
  • 从目录镜像或压缩 tarball 中读取数据快照
  • 用于嵌入式系统的轻量级捕获工具
  • 内置图表生成

安装 smem

大多数发行版(Debian、Ubuntu、Mint、Fedora、CentOS RHEK 等)都有 smem 包,因此我们可以从发行版官方存储库轻松安装。对于 RHEL/CentOS 启用 epel 存储库。

  • RHEL/CentOS
代码语言:javascript复制
$ sudo yum install smem
$ sudo yum install python-matplotlib
  • Fedora
代码语言:javascript复制
$ sudo dnf install smem
$ sudo dnf install python-matplotlib
  • Debian/Ubuntu
代码语言:javascript复制
$ sudo apt-get install smem
$ sudo apt-get install python-matplotlib

如何使用 smem 命令

使用不带任何选项的 smem 命令

在上述命令的帮助下成功安装 smem 后。只需在终端上触发以下命令即可测量内存使用情况。

代码语言:javascript复制
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 为单位显示输出

默认情况下,内存使用输出显示KB可能会混淆的内容,添加 k 选项和 smem 以获取输出MB

代码语言:javascript复制
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 显示总内存使用情况

甚至输出显示在 中MB,要使用 smem 获取总内存,请添加t选项。

代码语言:javascript复制
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
按用户报告内存使用情况

通过使用smem 命令``u添加选项,我们可以轻松地根据用户对内存使用情况进行排序。默认情况下,内存使用输出显示可能会混淆,所以我在每个输出上添加了选项,它将显示 .smem 中的 smem 输出。KB``k``MB

代码语言:javascript复制
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 生成饼图

你现在可以使用 smem 以饼图的形式查看内存使用情况(USS、PSS 和 RSS)

代码语言:javascript复制
rumenz@local ~ $ smem --pie name -s uss

image-20220212212106446

0 人点赞