linux 查看内存消耗情况,Linux终端:用smem查看内存占用情况

无论是作为系统管理员,还是作为使用桌面版Linux的简单用户,你都会注意到,某个进程在耗用你系统的所有内存。

首先要明白Linux是如何管理内存的;我多次接到用户的反映,说运行了free命令,就是无法适当读取输出。简而言之,如果是Linux内核,不用担心;内核在耗用内存,缓存文件呢。

放心,Linux内核开发人员比你我更有能力找到一种优秀的算法来缓存文件,并且当某个进程需要时,释放该内存区域,所以千万不要让我把运行诸如这种命令的某个任务放入计划任务(cron):

echo 3>/proc/sys/vm/drop_caches

当然,之后,你会在系统上有更多的可用闲置内存,但是系统不得不从磁盘重新读取所有文件,所以就性能而言,这通常是一个糟糕的举措:

但现在我们不妨看一个小巧的程序,它可以帮助我们找到哪些进程/用户在大量耗用我们系统的内存。

smem这个工具可以提供Linux系统上内存耗用情况方面的众多报告。与现有的工具不一样,smem可以报告实际使用的物理内存(PSS),这是一种更有意义的指标,可以衡量虚拟内存系统中的库和应用程序所占用的内存数量。

由于大部分的物理内存通常在多个应用程序之间共享,名为实际使用物理内存(RSS)的这个标准的内存耗用衡量指标会大大高估内存耗用情况。PSS这个参数而是衡量了每个应用程序在每个共享内存区中的“公平分配”,给出了一个切合实际的衡量指标。

smem有许多功能特性:

系统概况列表

按进程、映射和用户列表

按用户、映射或用户过滤

来自多个数据源的可配置列

可配置的输出单位和百分比

可配置的标题和总和

从/proc读取活动数据

从目录镜像或经过压缩的打包文件读取数据快照

面向嵌入式系统的轻型捕获工具

内置的图表生成功能

安装

如果你使用Debian、Ubuntu或Mint,可以使用下面这个命令,直接从官方软件库安装smem:

$ sudo apt-get install smem

Red Hat / Fedora / CentOS / SuSE用户可以使用直接从官方网站下载的预编译二进制代码。为了方便起见,你可以拷贝剪贴这些命令,这些命令会将命令smen放入到你的/usr/local/bin文件夹:

cd /tmp/

wget http://www.selenic.com/smem/download/smem-1.3.tar.gz

tar xvf smem-1.3.tar.gz

sudo cp /tmp/smem-1.3/smem /usr/local/bin/

sudo chmod +x /usr/local/bin/smem

基本用法

smem可报告物理内存使用情况,并且考虑到共享的内存页面。非共享内存被报告为进程独自占用的物理内存(USS)。共享内存在共享该内存的多个进程之间平均分配。非共享内存(USS)以及进程的共享内存比例被报告为实际使用的物理内存(PSS)。USS和PSS只包含物理内存使用情况。它们并不包含已经被置换到磁盘上的内存。

基本用法会显示运行中进程以及所用的内存数量;想看看这方面的情况,运行不带任何选项的命令smem,这会得出类似下面这样的输出:

# smem

PID User Command Swap USS PSS RSS

....

4223 linuxaria /usr/lib/chromium-browser/c 0 9144 11696 29132

14280 root python ./smem 0 11580 11839 13680

2180 linuxaria /usr/bin/python /usr/share/ 0 12956 14691 24392

2144 linuxaria python /usr/lib/linuxmint/m 0 20252 22337 35648

2121 linuxaria Thunar --daemon 0 13316 23122 44404

2123 linuxaria xfdesktop 0 24004 24924 36032

13095 linuxaria /usr/lib/chromium-browser/c 0 27536 30996 53328

2577 linuxaria /usr/bin/python /usr/lib/ub 0 34192 35112 41300

2127 linuxaria /home/riccio/copy/x86_64/Co 0 40268 41081 52248

10720 linuxaria /usr/lib/chromium-browser/c 0 38684 42107 63928

10561 linuxaria /usr/lib/chromium-browser/c 0 43956 48137 71644

10579 linuxaria /usr/lib/chromium-browser/c 0 46276 50290 73484

5605 linuxaria transmission-gtk /tmp/[kick 0 48616 51508 65148

8938 linuxaria /usr/lib/firefox/plugin-con 0 48960 55428 71132

2186 linuxaria /home/linuxaria/.dropbox-dist/ 0 55524 56061 64820

1722 root /usr/bin/X :0 -audit 0 -aut 0 52360 73110 96008

10623 linuxaria /usr/lib/chromium-browser/c 0 114224 121888 149236

4171 linuxaria chromium-browser --disable- 0 131044 140415 165780

7050 linuxaria /usr/lib/thunderbird/thunde 0 253428 256803 273152

2644 linuxaria /usr/lib/firefox/firefox 0 528420 537423 558992

所以在该示例(我的桌面)中,耗用较多内存的进程是Firefox,占用内存第二多的是Thunderbird。

-u是一个有用的选项,它显示了每个用户所耗用的内存总量:

#smem -u

User Count Swap USS PSS RSS

daemon 1 0 196 197 368

rtkit 1 0 300 312 1396

nobody 1 0 428 442 1600

mdm 2 0 600 695 1808

avahi 2 0 568 806 2420

syslog 1 0 1032 1043 1884

messagebus 1 0 1124 1207 2048

root 40 0 96568 123002 203372

linuxaria 83 0 1539864 1640378 2222556

可以为该命令添加-p,显示百分比数值:

#smem -u -p

User Count Swap USS PSS RSS

daemon 1 0.00% 0.00% 0.00% 0.00%

rtkit 1 0.00% 0.00% 0.00% 0.02%

nobody 1 0.00% 0.01% 0.01% 0.02%

mdm 2 0.00% 0.01% 0.01% 0.02%

avahi 2 0.00% 0.01% 0.01% 0.03%

syslog 1 0.00% 0.01% 0.01% 0.02%

messagebus 1 0.00% 0.01% 0.01% 0.03%

root 40 0.00% 1.18% 1.47% 2.41%

linuxaria 83 0.00% 19.29% 20.48% 27.58%

或者,如果你更想看到整个系统的内存使用情况,则可以使用-w选项:

#smem -w -p

Area Used Cache Noncache

firmware/hardware 0.00% 0.00% 0.00%

kernel image 0.00% 0.00% 0.00%

kernel dynamic memory 64.55% 62.42% 2.13%

userspace memory 22.12% 3.00% 19.12%

free memory 13.33% 13.33% 0.00%

说到-w,我建议另外使用选项-R REALMEM,这个值是指物理内存数量。这让smem可以在整个系统(-w)的输出中发现固件/硬件所耗用的内存数量。如果提供该选项,它还可以用作百分比所用到的总内存大小。

#smem -R 8G -w -p

Area Used Cache Noncache

firmware/hardware 2.83% 0.00% 2.83%

kernel image 0.00% 0.00% 0.00%

kernel dynamic memory 63.02% 60.95% 2.07%

userspace memory 21.60% 2.91% 18.68%

free memory 12.56% 12.56% 0.00%

借助smen,以图形显示linux内存

如果借助smem(又拥有matplotlib库),只要再借助几个选项,就可以生成条形图和饼形图。

显示带“pss”和“uss”这两列的条形图:

#smem --bar pid -c "pss uss"

bef6947176d60ae635d332bf54e29508.png

创建饼形图,显示在运行系统上以“k”开头的进程:

#smem -P '^k'--pie=name

94a163e74af129aca7c93071f5144628.png

结束语

smem是一款易于使用的工具,你在寻找大量耗用内存的进程时,它可以轻松给出一些有用信息,而且很容易以图形来显示,那样你就能联系用户,劝说他们在内存方面需要合理使用。

原文标题:Linux Terminal: Check who uses all your memory with smem

【编辑推荐】

【责任编辑:奔跑的冰淇淋 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值