前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中统计进程内存使用的神器

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

作者头像
入门笔记
发布2022-06-02 19:01:43
2K0
发布2022-06-02 19:01:43
举报
文章被收录于专栏:入门小站入门小站

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 入门小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Smem功能
  • 安装 smem
  • 如何使用 smem 命令
    • 使用不带任何选项的 smem 命令
      • 以 MB 为单位显示输出
        • smem 显示总内存使用情况
          • 按用户报告内存使用情况
            • 报告系统范围的内存使用摘要
              • 以百分比显示内存使用情况
                • 通过映射报告内存使用情况
                  • smem 数值输出
                  • smem 生成图形输出
                    • Smem 生成饼图
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档