在监视内存使用方面的内存管理是您的Linux系统上重要的一件事,有许多工具可用于监视内存使用情况,您可以在不同的Linux发行版上找到它们。 但是,他们以不同的方式工作,在这如何引导,我们将看看如何安装和使用这样的一个工具,叫做SMEM。
不要错过: 20命令行工具来监控Linux性能
SMEM是一个命令行内存报告工具,这就是给出了Linux系统上的内存使用的用户不同的报告。 有一个关于SMEM一个唯一的事情,不像其他传统的内存报告工具,它报告PSS( 比例集大小 ),通过在虚拟内存设置应用程序和库内存的使用更有意义的代表性。
Smem - Linux内存报告工具
现有的传统工具,主要集中在阅读RSS( 驻留集大小 ),这是用来监控物理内存方案内存使用量的衡量标准,但往往由应用程序高估内存使用情况。
PSS,另一方面,通过确定在虚拟内存方案使用的应用程序和库的内存“ 公平份额 ”给出了合理的措施。
你可以阅读本指南(关于内存RSS和PSS)了解Linux系统内存消耗,但让我们继续看一些SMEM的特点。
Smem工具的特点
- 系统概述列表
- 列表和过程,映射或用户过滤
- 使用/ proc文件系统的数据
- 可配置列出来自多个数据源的列
- 可配置的输出单位和百分比
- 容易配置列表中的标题和总计
- 使用来自目录镜像或压缩tar文件的数据快照
- 内置图表生成机制
- 轻量级捕获工具用于嵌入式系统
如何在Linux中安装Smem - 内存报告工具
之前您安装SMEM入手,系统必须满足以下要求:
- 现代内核(> 2.6.27左右)
- 最近版本的Python(2.4左右)
- 可选matplotlib库生成图表
大多数今天的Linux发行版都带有最新的内核版本与Python 2或3的支持,所以唯一的要求是要安装的是用来生成漂亮的图表matplotlib库。
在RHEL,CentOS和Fedora上
首先启用EPEL(对于企业版Linux额外的软件包)存储库 ,然后再安装如下:
# yum install smem python-matplotlib python-tk
在Debian和Ubuntu
$ sudo apt-get install smem
在Linux Mint
$ sudo apt-get install smem python-matplotlib python-tk
在Arch Linux上
使用此AUR库 。
如何在Linux中使用Smem - 内存报告工具
要查看所有系统用户在整个系统上使用内存的报告,请运行以下命令:
$ sudo smem
PID User Command Swap USS PSS RSS 6367 youcl cat 0 100 145 1784 6368 youcl cat 0 100 147 1676 2864 youcl /usr/bin/ck-launch-session 0 144 165 1780 7656 youcl gnome-pty-helper 0 156 178 1832 5758 youcl gnome-pty-helper 0 156 179 1916 1441 root /sbin/getty -8 38400 tty2 0 152 184 2052 1434 root /sbin/getty -8 38400 tty5 0 156 187 2060 1444 root /sbin/getty -8 38400 tty3 0 156 187 2060 1432 root /sbin/getty -8 38400 tty4 0 156 188 2124 1452 root /sbin/getty -8 38400 tty6 0 164 196 2064 2619 root /sbin/getty -8 38400 tty1 0 164 196 2136 3544 youcl sh -c /usr/lib/linuxmint/mi 0 212 224 1540 1504 root acpid -c /etc/acpi/events - 0 220 236 1604 3311 youcl syndaemon -i 0.5 -K -R 0 252 292 2556 3143 rtkit /usr/lib/rtkit/rtkit-daemon 0 300 326 2548 1588 root cron 0 292 333 2344 1589 avahi avahi-daemon: chroot helpe 0 124 334 1632 1523 root /usr/sbin/irqbalance 0 316 343 2096 585 root upstart-socket-bridge --dae 0 328 351 1820 3033 youcl /usr/bin/dbus-launch --exit 0 328 360 2160 1346 root upstart-file-bridge --daemo 0 348 371 1776 2607 root /usr/bin/xdm 0 188 378 2368 1635 kernoops /usr/sbin/kerneloops 0 352 386 2684 344 root upstart-udev-bridge --daemo 0 400 427 2132 2960 youcl /usr/bin/ssh-agent /usr/bin 0 480 485 992 3468 youcl /bin/dbus-daemon --config-f 0 344 515 3284 1559 avahi avahi-daemon: running [tecm 0 284 517 3108 7289 postfix pickup -l -t unix -u -c 0 288 534 2808 2135 root /usr/lib/postfix/master 0 352 576 2872 2436 postfix qmgr -l -t unix -u 0 360 606 2884 1521 root /lib/systemd/systemd-logind 0 600 650 3276 2222 nobody /usr/sbin/dnsmasq --no-reso 0 604 669 3288 ....
当一个正常的用户运行SMEM,它显示由用户已经开始时,流程被布置在增加PSS的顺序进程的内存使用。
看看下面的输出我的内存使用的系统由用户启动的进程aaronkilik
:
$ smem
PID User Command Swap USS PSS RSS 6367 youcl cat 0 100 145 1784 6368 youcl cat 0 100 147 1676 2864 youcl /usr/bin/ck-launch-session 0 144 166 1780 3544 youcl sh -c /usr/lib/linuxmint/mi 0 212 224 1540 3311 youcl syndaemon -i 0.5 -K -R 0 252 292 2556 3033 youcl /usr/bin/dbus-launch --exit 0 328 360 2160 3468 youcl /bin/dbus-daemon --config-f 0 344 515 3284 3122 youcl /usr/lib/gvfs/gvfsd 0 656 801 5552 3471 youcl /usr/lib/at-spi2-core/at-sp 0 708 864 5992 3396 youcl /usr/lib/gvfs/gvfs-mtp-volu 0 804 914 6204 3208 youcl /usr/lib/x86_64-linux-gnu/i 0 892 1012 6188 3380 youcl /usr/lib/gvfs/gvfs-afc-volu 0 820 1024 6396 3034 youcl //bin/dbus-daemon --fork -- 0 920 1081 3040 3365 youcl /usr/lib/gvfs/gvfs-gphoto2- 0 972 1099 6052 3228 youcl /usr/lib/gvfs/gvfsd-trash - 0 980 1153 6648 3107 youcl /usr/lib/dconf/dconf-servic 0 1212 1283 5376 6399 youcl /opt/google/chrome/chrome - 0 144 1409 10732 3478 youcl /usr/lib/x86_64-linux-gnu/g 0 1724 1820 6320 7365 youcl /usr/lib/gvfs/gvfsd-http -- 0 1352 1884 8704 6937 youcl /opt/libreoffice5.0/program 0 1140 2328 5040 3194 youcl /usr/lib/x86_64-linux-gnu/p 0 1956 2405 14228 6373 youcl /opt/google/chrome/nacl_hel 0 2324 2541 8908 3313 youcl /usr/lib/gvfs/gvfs-udisks2- 0 2460 2754 8736 3464 youcl /usr/lib/at-spi2-core/at-sp 0 2684 2823 7920 5771 youcl ssh -p 4521 tecmnt765@212.7 0 2544 2864 6540 5759 youcl /bin/bash 0 2416 2923 5640 3541 youcl /usr/bin/python /usr/bin/mi 0 2584 3008 7248 7657 youcl bash 0 2516 3055 6028 3127 youcl /usr/lib/gvfs/gvfsd-fuse /r 0 3024 3126 8032 3205 youcl mate-screensaver 0 2520 3331 18072 3171 youcl /usr/lib/mate-panel/notific 0 2860 3495 17140 3030 youcl x-session-manager 0 4400 4879 17500 3197 youcl mate-volume-control-applet 0 3860 5226 23736 ...
有很多选择,同时采用SMEM,例如,可以查看系统范围内的内存消耗,运行以下命令来调用:
$ sudo smem -w
Area Used Cache Noncache firmware/hardware 0 0 0 kernel image 0 0 0 kernel dynamic memory 1425320 1291412 133908 userspace memory 2215368 451608 1763760 free memory 4424936 4424936 0
要查看每个用户的内存使用情况,请运行以下命令:
$ sudo smem -u
User Count Swap USS PSS RSS rtkit 1 0 300 326 2548 kernoops 1 0 352 385 2684 avahi 2 0 408 851 4740 postfix 2 0 648 1140 5692 messagebus 1 0 1012 1173 3320 syslog 1 0 1396 1419 3232 www-data 2 0 5100 6572 13580 mpd 1 0 7416 8302 12896 nobody 2 0 4024 11305 24728 root 39 0 323876 353418 496520 youcl 64 0 1652888 1815699 2763112
您还可以通过映射报告内存使用情况,如下所示:
$ sudo smem -m
Map PIDs AVGPSS PSS /dev/fb0 1 0 0 /home/youcl/.cache/fontconfig/7ef2298f 18 0 0 /home/youcl/.cache/fontconfig/c57959a1 18 0 0 /home/youcl/.local/share/mime/mime.cac 15 0 0 /opt/google/chrome/chrome_material_100_p 9 0 0 /opt/google/chrome/chrome_material_200_p 9 0 0 /usr/lib/x86_64-linux-gnu/gconv/gconv-mo 41 0 0 /usr/share/icons/Mint-X-Teal/icon-theme. 15 0 0 /var/cache/fontconfig/0c9eb80ebd1c36541e 20 0 0 /var/cache/fontconfig/0d8c3b2ac0904cb8a5 20 0 0 /var/cache/fontconfig/1ac9eb803944fde146 20 0 0 /var/cache/fontconfig/3830d5c3ddfd5cd38a 20 0 0 /var/cache/fontconfig/385c0604a188198f04 20 0 0 /var/cache/fontconfig/4794a0821666d79190 20 0 0 /var/cache/fontconfig/56cf4f4769d0f4abc8 20 0 0 /var/cache/fontconfig/767a8244fc0220cfb5 20 0 0 /var/cache/fontconfig/8801497958630a81b7 20 0 0 /var/cache/fontconfig/99e8ed0e538f840c56 20 0 0 /var/cache/fontconfig/b9d506c9ac06c20b43 20 0 0 /var/cache/fontconfig/c05880de57d1f5e948 20 0 0 /var/cache/fontconfig/dc05db6664285cc2f1 20 0 0 /var/cache/fontconfig/e13b20fdb08344e0e6 20 0 0 /var/cache/fontconfig/e7071f4a29fa870f43 20 0 0 ....
也有过滤SMEM输出选项,我们会在两个例子看这里。
要通过用户名筛选输出,调用-u
或--userfilter="regex"
选项,如下图所示:
$ sudo smem -u
User Count Swap USS PSS RSS rtkit 1 0 300 326 2548 kernoops 1 0 352 385 2684 avahi 2 0 408 851 4740 postfix 2 0 648 1140 5692 messagebus 1 0 1012 1173 3320 syslog 1 0 1400 1423 3236 www-data 2 0 5100 6572 13580 mpd 1 0 7416 8302 12896 nobody 2 0 4024 11305 24728 root 39 0 323804 353374 496552 youcl 64 0 1708900 1871766 2819212
要通过进程名滤波器输出调用-P
或--processfilter="regex"
如下选项:
$ sudo smem --processfilter="firefox"
PID User Command Swap USS PSS RSS 9212 root sudo smem --processfilter=f 0 1172 1434 4856 9213 root /usr/bin/python /usr/bin/sm 0 7368 7793 11984 4424 youcl /usr/lib/firefox/firefox 0 931732 937590 961504
输出格式化可能非常重要,并且有选项可以帮助您格式化内存报告,我们将看看下面的几个例子。
要显示在报告中所需的列,使用-c
或--columns
如下选项:
$ sudo smem -c "name user pss rss"
Name User PSS RSS cat youcl 145 1784 cat youcl 147 1676 ck-launch-sessi youcl 165 1780 gnome-pty-helpe youcl 178 1832 gnome-pty-helpe youcl 179 1916 getty root 184 2052 getty root 187 2060 getty root 187 2060 getty root 188 2124 getty root 196 2064 getty root 196 2136 sh youcl 224 1540 acpid root 236 1604 syndaemon youcl 296 2560 rtkit-daemon rtkit 326 2548 cron root 333 2344 avahi-daemon avahi 334 1632 irqbalance root 343 2096 upstart-socket- root 351 1820 dbus-launch youcl 360 2160 upstart-file-br root 371 1776 xdm root 378 2368 kerneloops kernoops 386 2684 upstart-udev-br root 427 2132 ssh-agent youcl 485 992 ...
您可以调用-p
选项报告中的百分比内存使用情况,如下面的命令:
$ sudo smem -p
PID User Command Swap USS PSS RSS 6367 youcl cat 0.00% 0.00% 0.00% 0.02% 6368 youcl cat 0.00% 0.00% 0.00% 0.02% 9307 youcl sh -c { sudo /usr/lib/linux 0.00% 0.00% 0.00% 0.02% 2864 youcl /usr/bin/ck-launch-session 0.00% 0.00% 0.00% 0.02% 3544 youcl sh -c /usr/lib/linuxmint/mi 0.00% 0.00% 0.00% 0.02% 5758 youcl gnome-pty-helper 0.00% 0.00% 0.00% 0.02% 7656 youcl gnome-pty-helper 0.00% 0.00% 0.00% 0.02% 1441 root /sbin/getty -8 38400 tty2 0.00% 0.00% 0.00% 0.03% 1434 root /sbin/getty -8 38400 tty5 0.00% 0.00% 0.00% 0.03% 1444 root /sbin/getty -8 38400 tty3 0.00% 0.00% 0.00% 0.03% 1432 root /sbin/getty -8 38400 tty4 0.00% 0.00% 0.00% 0.03% 1452 root /sbin/getty -8 38400 tty6 0.00% 0.00% 0.00% 0.03% 2619 root /sbin/getty -8 38400 tty1 0.00% 0.00% 0.00% 0.03% 1504 root acpid -c /etc/acpi/events - 0.00% 0.00% 0.00% 0.02% 3311 youcl syndaemon -i 0.5 -K -R 0.00% 0.00% 0.00% 0.03% 3143 rtkit /usr/lib/rtkit/rtkit-daemon 0.00% 0.00% 0.00% 0.03% 1588 root cron 0.00% 0.00% 0.00% 0.03% 1589 avahi avahi-daemon: chroot helpe 0.00% 0.00% 0.00% 0.02% 1523 root /usr/sbin/irqbalance 0.00% 0.00% 0.00% 0.03% 585 root upstart-socket-bridge --dae 0.00% 0.00% 0.00% 0.02% 3033 youcl /usr/bin/dbus-launch --exit 0.00% 0.00% 0.00% 0.03% ....
以下命令将在输出的每列的末尾显示总计:
$ sudo smem -t
PID User Command Swap USS PSS RSS 6367 youcl cat 0 100 139 1784 6368 youcl cat 0 100 141 1676 9307 youcl sh -c { sudo /usr/lib/linux 0 96 158 1508 2864 youcl /usr/bin/ck-launch-session 0 144 163 1780 3544 youcl sh -c /usr/lib/linuxmint/mi 0 108 170 1540 5758 youcl gnome-pty-helper 0 156 176 1916 7656 youcl gnome-pty-helper 0 156 176 1832 1441 root /sbin/getty -8 38400 tty2 0 152 181 2052 1434 root /sbin/getty -8 38400 tty5 0 156 184 2060 1444 root /sbin/getty -8 38400 tty3 0 156 184 2060 1432 root /sbin/getty -8 38400 tty4 0 156 185 2124 1452 root /sbin/getty -8 38400 tty6 0 164 193 2064 2619 root /sbin/getty -8 38400 tty1 0 164 193 2136 1504 root acpid -c /etc/acpi/events - 0 220 232 1604 3311 youcl syndaemon -i 0.5 -K -R 0 260 298 2564 3143 rtkit /usr/lib/rtkit/rtkit-daemon 0 300 324 2548 1588 root cron 0 292 326 2344 1589 avahi avahi-daemon: chroot helpe 0 124 332 1632 1523 root /usr/sbin/irqbalance 0 316 340 2096 585 root upstart-socket-bridge --dae 0 328 349 1820 3033 youcl /usr/bin/dbus-launch --exit 0 328 359 2160 1346 root upstart-file-bridge --daemo 0 348 370 1776 2607 root /usr/bin/xdm 0 188 375 2368 1635 kernoops /usr/sbin/kerneloops 0 352 384 2684 344 root upstart-udev-bridge --daemo 0 400 426 2132 ..... ------------------------------------------------------------------------------- 134 11 0 2171428 2376266 3587972
此外,还有图形报告的选项,您也可以使用,我们将在此子部分深入讨论。
可以产生的过程及其PSS和RSS值的条线图,在下面的例子中,我们产生的由根用户拥有的进程的条形图。
垂直平面显示进程的PSS和RSS测量与水平面表示各根用户进程:
$ sudo smem --userfilter="root" --bar pid -c"pss rss"
Linux内存在PSS和RSS值中的使用
您也可以生产出基于PSS或者RSS值的过程及其内存消耗的饼图。 下面的命令输出按root用户的测量值拥有的进程饼图。
该--pie
名由名字的意思是标签和-s
选项有助于PSS值进行排序。
$ sudo smem --userfilter="root" --pie name -s pss
Linux进程的内存消耗
有除了PSS和RSS用于标记图表许多其他已知的领域:
如需帮助,只需键入, smem -h
或访问手动输入页面。
我们应SMEM到此为止,而是为了更好地了解它,使用您可以在手册页找到很多其他选择使用它。 像往常一样,你可以使用下面的评论部分表达任何想法或关注。