暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

linux 内存监控工具-smem学习记录

原创 尚雷 2022-11-23
2156

备注:早上的时候看到一位关注很久的老DBA写的一篇关于分析数据库内存的微信公众号文章,里面提到了内存的监控,特别是linux在引入了虚拟内存、NUMA等东西后,对于内存这块真的很蒙圈,在其文章中讲述了如何分析内存,特别是推荐了smem这款

分析工具,于是并上网搜了下相关的资料,尝试安装了下,并将整个过程记录下来,以便以后用到。

smem介绍

smem是Linux系统上的一款可以生成多种内存耗用报告的命令行工具,smem可以报告实际使用的物理内存(PSS),可以衡量虚拟内存系统的库和应用程序所占用的内存数量。

Smem工具和linux上的其他工具之间的最大区别就是,它能分析物理内存的真实使用情况

smem的功能特性如下:

  1. 系统概况列表
  2. 按进程、映射和用户列表
  3. 按用户、映射或用户过滤
  4. 来自多个数据源的可配置列
  5. 可配置的输出单位和百分比
  6. 可配置的标题和总和
  7. 从/proc读取活动数据
  8. 从目录镜像或经过压缩的打包文件读取数据快照
  9. 面向嵌入式系统的轻型捕获工具
  10. 内置的图表生成功能

Linux使用到了虚拟内存(virtual memory),因此要准确的计算一个进程实际使用的物理内存就不是那么简单。只知道进程的虚拟内存大小也并没有太大的用处,因为还是无法获取到实际分配的物理内存大小。

RSS(Resident set size),使用top命令可以查询到,是最常用的内存指标,表示进程占用的物理内存大小。但是,将各进程的RSS值相加,通常会超出整个系统的内存消耗,这是因为RSS中包含了各进程间共享的内存。

PSS(Proportional set size)所有使用某共享库的程序均分该共享库占用的内存时,每个进程占用的内存。显然所有进程的PSS之和就是系统的内存使用量。它会更准确一些,它将共享内存的大小进行平均后,再分摊到各进程上去。

USS(Unique set size )进程独自占用的内存,它是PSS中自己的部分,它只计算了进程独自占用的内存大小,不包含任何共享的部分。

VSS – Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS – Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS – Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS – Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

smem工具安装

去官方网址https://www.selenic.com/smem/ 下载对应的smem安装包,以下是展示在Centos 7上的安装过程。
image.png

[root@redis-1 ~]# tar -zxvf smem-1.4.tar.gz
smem-1.4/.hg_archival.txt
smem-1.4/.hgtags
smem-1.4/COPYING
smem-1.4/smem
smem-1.4/smem.8
smem-1.4/smemcap.c
[root@redis-1 ~]# cp /root/smem-1.4/smem /usr/bin
[root@redis-1 ~]# chmod +x /usr/bin/smem

smem工具使用

使用smem -h 命令可以查看smem的命令帮助
image.png
1: 无参数时smem显示所有进程内存使用情况

[root@redis-1 ~]# smem
  PID User     Command                         Swap      USS      PSS      RSS
 1461 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1462 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1463 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1464 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1465 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1466 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1467 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1468 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1469 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1470 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1471 zabbix   /opt/zabbix/sbin/zabbix_age        0       76       92      644
 1456 zabbix   /opt/zabbix/sbin/zabbix_age        0       96      129      816
 1459 zabbix   /opt/zabbix/sbin/zabbix_age        0      116      129      644
 1460 zabbix   /opt/zabbix/sbin/zabbix_age        0      116      129      644
 1178 root     /usr/sbin/atd -f                   0      232      259     1040
 1110 root     /usr/sbin/irqbalance --fore        0      392      449     1316
24338 root     /sbin/auditd                       0      556      586     1152
 1158 rpc      /sbin/rpcbind -w                   0      596      614     1140
 1458 zabbix   /opt/zabbix/sbin/zabbix_age        0      636      662     1200
 1177 root     /usr/sbin/crond -n                 0      672      705     1620
  737 root     /usr/sbin/lvmetad -f               0      688      729     1640
 1163 root     /usr/sbin/gssproxy -D              0      740      765     1424
 1813 root     -bash                              0      468      766     2140
 1154 chrony   /usr/sbin/chronyd                  0      668      772     1848
 7942 root     -bash                              0      508      809     2188
 5680 root     -bash                              0      520      821     2200
 1148 root     /usr/lib/systemd/systemd-lo        0      840      874     1804
 1477 root     login -- root                      0      732     1141     2720
 1112 dbus     /usr/bin/dbus-daemon --syst        0      908     1152     2552
 1436 root     /usr/libexec/postfix/master        0     1148     1198     2188
 1318 root     /usr/sbin/sshd -D                  0     1032     1610     4380
 1441 postfix  qmgr -l -t unix -u                 0     1224     1645     4108
  740 root     /usr/lib/systemd/systemd-ud        0     1800     1868     2852
 1176 postfix  pickup -l -t unix -u               0     1540     1911     4072
 7940 root     sshd: root@pts/0,pts/              0     1820     2812     6024
    1 root     /usr/lib/systemd/systemd --        0     3084     3197     4300
 1151 root     /usr/bin/vmtoolsd                  0     2520     3264     6328
 1150 root     /usr/bin/VGAuthService -s          0     2840     3477     6256
 1379 root     ./SFTServer                        0     2324     4481     8072
  715 root     /usr/lib/systemd/systemd-jo        0     3040     5780     9412
 6225 root     python /usr/bin/smem               0     5700     6387     7908
 9672 root     /usr/sbin/glusterd -p /var/        0     6240     6446     8332
 4414 root     redis-cli -h 192.168.1.113        0     7068     7090     7848
 1378 root     ./SFTMonitor                       0     5524     7656    10936
 1580 root     /usr/sbin/rsyslogd -n              0     6728     9513    13500
 8873 root     redis-server 192.168.1.112        0    10540    11017    12164
 8882 root     redis-server 192.168.1.112        0    10688    11165    12308
 1107 polkitd  /usr/lib/polkit-1/polkitd -        0    10868    11370    13644
 1319 root     /usr/bin/python2 -Es /usr/s        0    14420    15765    19344

2:参数-u 显示每个用户所耗用的内存总量

[root@local-oracle-db ~]# smem -u
User     Count     Swap      USS      PSS      RSS
rpc          1        0      600      605     1128
dbus         1        0      888     1036     2508
postfix      2        0     2424     2954     8252
zabbix      15        0     3788     4094    16296
polkitd      1        0     4856     5556     8376
root        35        0    63088    80612   155280
grid        32        0   370336   433228   985848
oracle     172        0  2396248  2482417  6133164

3: 参数-p 查看耗用内存情况的百分比

[root@redis-1 ~]# smem -p
  PID User     Command                         Swap      USS      PSS      RSS
 1461 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1462 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1463 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1464 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1465 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1466 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1467 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1468 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1469 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1470 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1471 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1456 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1459 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1460 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.00%    0.00%    0.01%
 1178 root     /usr/sbin/atd -f               0.00%    0.00%    0.00%    0.01%
 1110 root     /usr/sbin/irqbalance --fore    0.00%    0.00%    0.00%    0.01%
24338 root     /sbin/auditd                   0.00%    0.01%    0.01%    0.01%
 1158 rpc      /sbin/rpcbind -w               0.00%    0.01%    0.01%    0.01%
 1458 zabbix   /opt/zabbix/sbin/zabbix_age    0.00%    0.01%    0.01%    0.01%
 1177 root     /usr/sbin/crond -n             0.00%    0.01%    0.01%    0.02%
  737 root     /usr/sbin/lvmetad -f           0.00%    0.01%    0.01%    0.02%
 1163 root     /usr/sbin/gssproxy -D          0.00%    0.01%    0.01%    0.01%
 1813 root     -bash                          0.00%    0.00%    0.01%    0.02%
 1154 chrony   /usr/sbin/chronyd              0.00%    0.01%    0.01%    0.02%
 7942 root     -bash                          0.00%    0.01%    0.01%    0.02%
 5680 root     -bash                          0.00%    0.01%    0.01%    0.02%
 1148 root     /usr/lib/systemd/systemd-lo    0.00%    0.01%    0.01%    0.02%
 1477 root     login -- root                  0.00%    0.01%    0.01%    0.03%
 1112 dbus     /usr/bin/dbus-daemon --syst    0.00%    0.01%    0.01%    0.03%
 1436 root     /usr/libexec/postfix/master    0.00%    0.01%    0.01%    0.02%
 1318 root     /usr/sbin/sshd -D              0.00%    0.01%    0.02%    0.04%
 1441 postfix  qmgr -l -t unix -u             0.00%    0.01%    0.02%    0.04%
  740 root     /usr/lib/systemd/systemd-ud    0.00%    0.02%    0.02%    0.03%
 1176 postfix  pickup -l -t unix -u           0.00%    0.02%    0.02%    0.04%
 7940 root     sshd: root@pts/0,pts/          0.00%    0.02%    0.03%    0.06%
    1 root     /usr/lib/systemd/systemd --    0.00%    0.03%    0.03%    0.04%
 1151 root     /usr/bin/vmtoolsd              0.00%    0.03%    0.03%    0.06%
 1150 root     /usr/bin/VGAuthService -s      0.00%    0.03%    0.03%    0.06%
 1379 root     ./SFTServer                    0.00%    0.02%    0.04%    0.08%
  715 root     /usr/lib/systemd/systemd-jo    0.00%    0.03%    0.06%    0.09%
 6507 root     python /usr/bin/smem -p        0.00%    0.06%    0.06%    0.08%
 9672 root     /usr/sbin/glusterd -p /var/    0.00%    0.06%    0.06%    0.08%
 4414 root     redis-cli -h 192.168.17.113    0.00%    0.07%    0.07%    0.08%
 1378 root     ./SFTMonitor                   0.00%    0.05%    0.08%    0.11%
 1580 root     /usr/sbin/rsyslogd -n          0.00%    0.07%    0.09%    0.13%
 8873 root     redis-server 192.168.17.112    0.00%    0.10%    0.11%    0.12%
 8882 root     redis-server 192.168.17.112    0.00%    0.11%    0.11%    0.12%
 1107 polkitd  /usr/lib/polkit-1/polkitd -    0.00%    0.11%    0.11%    0.14%
 1319 root     /usr/bin/python2 -Es /usr/s    0.00%    0.14%    0.16%    0.19%

4: 参数-w 查看系统内存使用情况

[root@local-oracle-db ~]# smem -w
Area                           Used      Cache   Noncache
firmware/hardware                 0          0          0
kernel image                      0          0          0
kernel dynamic memory     116162764   28144560   88018204
userspace memory            3011960     278888    2733072
free memory                12272844   12272844          0

5: 参数-R REALMEM

REALMEM这个值是指物理内存数量。此参数可以让smem在整个系统(-w)的输出中发现固件/硬件所耗用的内存数量

[root@local-oracle-db ~]# smem -R 64G -w
Area                           Used      Cache   Noncache
firmware/hardware                 0          0          0
kernel image                      0          0          0
kernel dynamic memory     116162604   28144240   88018364
userspace memory            3022124     279296    2742828
free memory                12262840   12262840          0

6:参数-c 用来显示需要展示的列

[root@local-bi-oracle-db ~]# smem -c "name user pss"
Name                     User          PSS
zabbix_agentd            zabbix        135
zabbix_agentd            zabbix        149
zabbix_agentd            zabbix        149
zabbix_agentd            zabbix        149
zabbix_agentd            zabbix        152
zabbix_agentd            zabbix        152
zabbix_agentd            zabbix        152
zabbix_agentd            zabbix        152
zabbix_agentd            zabbix        152
zabbix_agentd            zabbix        155
zabbix_agentd            zabbix        155
zabbix_agentd            zabbix        155
zabbix_agentd            zabbix        159
zabbix_agentd            zabbix        159
agetty                   root          177
init.ohasd               root          406
irqbalance               root          480
bash                     oracle        506
bash                     oracle        506
bash                     root          506
bash                     root          526
bash                     root          530
bash                     oracle        531
auditd                   root          540
bash                     root          547
bash                     root          563
rpcbind                  rpc           605
lvmetad                  root          625

7: 参数-s 根据某一列(例如 rss)来排序

[root@local-oracle-db ~]# smem -s rss
  PID User     Command                         Swap      USS      PSS      RSS
 2401 zabbix   /opt/zabbix/sbin/zabbix_age        0      112      135      820
 2422 root     /sbin/agetty --noclear tty1        0      172      177      864
 2406 zabbix   /opt/zabbix/sbin/zabbix_age        0      140      159      992
 2407 zabbix   /opt/zabbix/sbin/zabbix_age        0      140      159      992
 2410 zabbix   /opt/zabbix/sbin/zabbix_age        0      132      152      992
 2411 zabbix   /opt/zabbix/sbin/zabbix_age        0      132      152      992
 2412 zabbix   /opt/zabbix/sbin/zabbix_age        0      128      149      992
 2413 zabbix   /opt/zabbix/sbin/zabbix_age        0      128      149      992
 2414 zabbix   /opt/zabbix/sbin/zabbix_age        0      128      149      992
 2415 zabbix   /opt/zabbix/sbin/zabbix_age        0      132      152      992
 2416 zabbix   /opt/zabbix/sbin/zabbix_age        0      132      152      992
 2417 zabbix   /opt/zabbix/sbin/zabbix_age        0      132      152      992
 2418 zabbix   /opt/zabbix/sbin/zabbix_age        0      136      155      992
 2419 zabbix   /opt/zabbix/sbin/zabbix_age        0      136      155      992
 2421 zabbix   /opt/zabbix/sbin/zabbix_age        0      136      155      992
 1688 root     /sbin/auditd                       0      536      540     1092
 1753 rpc      /sbin/rpcbind -w                   0      600      605     1128
 1727 root     /usr/sbin/irqbalance --fore        0      448      480     1420
 1812 root     /usr/sbin/gssproxy -D              0      732      736     1432
  791 root     /usr/sbin/lvmetad -f               0      616      625     1572
 2350 root     /usr/sbin/crond -n                 0      672      679     1616
31289 root     /bin/sh /etc/init.d/init.oh        0      340      406     1704
 1721 root     /usr/lib/systemd/systemd-lo        0      800      809     1772
 3057 root     -bash                              0      412      506     2052
190328 oracle   -bash                              0      412      506     2060
210952 oracle   -bash                              0      412      506     2060
190740 root     -bash                              0      432      526     2068
247779 root     -bash                              0      436      530     2072

8: 参数-r 一般与参数-s结合使用,表示反转排序(从升序改为降序)

[root@redis-1 ~]# smem -s rss -r
  PID User     Command                         Swap      USS      PSS      RSS
 1319 root     /usr/bin/python2 -Es /usr/s        0    14420    15765    19344
 1107 polkitd  /usr/lib/polkit-1/polkitd -        0    10868    11370    13644
 1580 root     /usr/sbin/rsyslogd -n              0     6728     9517    13508
 8882 root     redis-server 192.168.17.112        0    10688    11165    12308
 8873 root     redis-server 192.168.17.112        0    10540    11017    12164
 1378 root     ./SFTMonitor                       0     5524     7656    10936
  715 root     /usr/lib/systemd/systemd-jo        0     3040     5784     9420
 9672 root     /usr/sbin/glusterd -p /var/        0     6240     6446     8332
 1379 root     ./SFTServer                        0     2324     4481     8072
 7330 root     python /usr/bin/smem -s rss        0     5748     6435     7956
 4414 root     redis-cli -h 192.168.17.113        0     7068     7090     7848
 1151 root     /usr/bin/vmtoolsd                  0     2520     3264     6328
 1150 root     /usr/bin/VGAuthService -s          0     2840     3477     6256
 7940 root     sshd: root@pts/0,pts/              0     1824     2816     6028
 1318 root     /usr/sbin/sshd -D                  0     1032     1610     4380
    1 root     /usr/lib/systemd/systemd --        0     3084     3197     4300
 1441 postfix  qmgr -l -t unix -u                 0     1224     1645     4108
 1176 postfix  pickup -l -t unix -u               0     1540     1911     4072
  740 root     /usr/lib/systemd/systemd-ud        0     1800     1868     2852
 1477 root     login -- root                      0      732     1141     2720
 1112 dbus     /usr/bin/dbus-daemon --syst        0      908     1152     2552
 5680 root     -bash                              0      520      821     2200
 7942 root     -bash                              0      508      809     2188
 1436 root     /usr/libexec/postfix/master        0     1148     1198     2188
 1813 root     -bash                              0      468      766     2140
 1154 chrony   /usr/sbin/chronyd                  0      668      772     1848
 1148 root     /usr/lib/systemd/systemd-lo        0      840      874     1804
  737 root     /usr/sbin/lvmetad -f               0      688      729     1640
 1177 root     /usr/sbin/crond -n                 0      672      705     1620
 1163 root     /usr/sbin/gssproxy -D              0      740      765     1424
 1110 root     /usr/sbin/irqbalance --fore        0      392      449     1316
 1458 zabbix   /opt/zabbix/sbin/zabbix_age        0      636      662     1200
24338 root     /sbin/auditd                       0      556      586     1152
 1158 rpc      /sbin/rpcbind -w                   0      596      614     1140
 1178 root     /usr/sbin/atd -f                   0      232      259     1040
 1456 zabbix   /opt/zabbix/sbin/zabbix_age        0       96      129      816

9:参数-M 过滤相关进程。Show processes filtered by mapping

[root@redis-1 ~]# smem -M redis
  PID User     Command                         Swap      USS      PSS      RSS
 4414 root     redis-cli -h 192.168.1.113        0      388      388      388
 8873 root     redis-server 192.168.1.112        0       60      506      952
 8882 root     redis-server 192.168.1.112        0      112      558     1004
 
[root@local-oracle-db ~]# smem -M oracle
  PID User     Command                         Swap      USS      PSS      RSS
31577 grid     /u01/app/19.0.0/grid/bin/or        0        0        0        4
31847 grid     asm_smon_+ASM                      0       32      548    12840
31855 grid     asm_pxmn_+ASM                      0       36      553    12840
31803 grid     asm_psp0_+ASM                      0       40      559    12848
31818 grid     asm_mman_+ASM                      0       56      574    12860
31808 grid     asm_vktm_+ASM                      0       56      587    12872
189561 oracle   ora_p008_ccdb                    0      512      589    13912
189563 oracle   ora_p009_ccdb                    0      512      589    13908
189565 oracle   ora_p00a_ccdb                    0      512      589    13904
189568 oracle   ora_p00b_ccdb                    0      512      589    13912
189570 oracle   ora_p00c_ccdb                    0      512      589    13912
最后修改时间:2022-11-29 09:29:31
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论