Linux Command vmstat 监控内存

简介: Linux Command vmstat 监控内存

Linux Command vmstat 监控内存

tags: 监控, 分析

文章目录

Linux Command vmstat 监控内存

1. 简介

2. 命令格式

3. 命令参数

4. 示例

4.1 显示虚拟内存使用情况

4.2 显示活跃和非活跃内存

4.3 查看系统已经fork了多少次

4.4 查看内存使用的详细信息

4.5 查看磁盘的读/写

4.6 查看/dev/sda1磁盘的读/写

4.7 查看系统的slab信息

1. 简介

vmstat(VirtualMeomoryStatistics,虚拟内存统计) 是Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。

vmstat的常规用法:vmstat interval times即每隔interval秒采样一次,共采样times次,如果省略times,则一直采集数据,直到用户手动停止为止。

简单举个例子:

[root@master ~]# vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 190476   1292 1281164    0    0    16    23  483  414  4  5 91  0  0
 0  0      0 190608   1292 1281240    0    0     0     0  903 1622  2  4 94  0  0
 3  0      0 190196   1292 1281264    0    0     0     5  948 1689  3  4 93  0  0

可以使用ctrl+c停止vmstat采集数据。

第一行显示了系统自启动以来的平均值,第二行开始显示现在正在发生的情况,接下来的行会显示每5秒间隔发生了什么,每一列的含义在头部,如下所示:


procs:r这一列显示了多少进程在等待cpu,b列显示多少进程正在不可中断的休眠(等待IO)。

memory:swapd列显示了多少块被换出了磁盘(页面交换),剩下的列显示了多少块是空闲的(未被使用),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。

swap:显示交换活动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)。

io:显示了多少块从块设备读取(bi)和写出(bo),通常反映了硬盘I/O。

system:显示每秒中断(in)和上下文切换(cs)的数量。

cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO。

内存不足的表现:free memory急剧减少,回收buffer和cacher也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待IO的进程数(b)增多,大量CPU时间用于等待IO(wa)


vmstat r, b, si, so, bi, bo 这几列表示什么含义呢?

答:

[root@centos6 ~ 10:57 #39]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0 1783964  13172 106056    0    0    29     7   15   11  0  0 99  0  0
  • r即running,表示正在跑的任务数
  • b即blocked,表示被阻塞的任务数
  • si表示有多少数据从交换分区读入内存
  • so表示有多少数据从内存写入交换分区
  • bi表示有多少数据从磁盘读入内存
  • bo表示有多少数据从内存写入磁盘

简记:

  • i --input,进入内存
  • o --output,从内存出去
  • s --swap,交换分区
  • b --block,块设备,磁盘

单位都是KB

2. 命令格式

vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]

3. 命令参数

-a:显示活跃和非活跃内存


-f:显示从系统启动至今的fork数量 。


-m:显示slabinfo


-n:只在开始时显示一次各字段名称。


-s:显示内存相关统计信息及多种系统活动数量。


delay:刷新时间间隔。如果不指定,只显示一条结果。


count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。


-d:显示磁盘相关统计信息。


-p:显示指定磁盘分区统计信息


-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)


-V:显示vmstat版本信息。

4. 示例

4.1 显示虚拟内存使用情况

vmstat 5 6 #表示在5秒时间内进行6次采样。将得到一个数据汇总他能够反映真正的系统情况

[root@master ~]# vmstat 5 6
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 171568   1292 1289680    0    0    15    23  484  421  4  5 91  0  0
 1  0      0 171584   1292 1289724    0    0     0     2  888 1670  3  4 94  0  0
 0  0      0 170508   1292 1289892    0    0     0    14  940 1753  2  4 94  0  0
 5  0      0 170588   1292 1289936    0    0     0    49  919 1717  2  3 95  0  0
 1  0      0 170588   1292 1289976    0    0     0    22  948 1708  2  4 93  0  0
 0  0      0 170508   1292 1290016    0    0     0    16 1026 1794  3  4 92  0  0

4.2 显示活跃和非活跃内存

[root@master ~]# vmstat -a 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 181852 355052 892856    0    0    15    23  484  422  4  5 91  0  0
 4  0      0 166352 355092 904644    0    0     0   110 1516 2867  9 12 79  0  0
 2  0      0 153920 355072 916868    0    0     0   141 1292 2203  9  5 87  0  0
 1  0      0 156708 355080 915332    0    0     0     0 1230 2145  4  7 89  0  0
 1  0      0 156620 355072 915432    0    0     0    51 1104 2001  3  5 92  0  0

4.3 查看系统已经fork了多少次

vmstat -f #这个数据是从/proc/stat中的processes字段里取得的

[root@master ~]# vmstat -f
       338852 forks

4.4 查看内存使用的详细信息

vmstat -s #这些信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat

[root@master ~]# vmstat -f
       338852 forks
[root@master ~]# vmstat -s  
      1863252 K total memory
       417256 K used memory
       918768 K active memory
       355072 K inactive memory
       152384 K free memory
         1292 K buffer memory
      1292320 K swap cache
            0 K total swap
            0 K used swap
            0 K free swap
       310918 non-nice user cpu ticks
         4074 nice user cpu ticks
       406501 system cpu ticks
      7950034 idle cpu ticks
         2466 IO-wait cpu ticks
            0 IRQ cpu ticks
        37468 softirq cpu ticks
            0 stolen cpu ticks
      1328395 pages paged in
      2002004 pages paged out
            0 pages swapped in
            0 pages swapped out
     85085982 interrupts
    208703640 CPU context switches
   1623694269 boot time
       339560 forks

4.5 查看磁盘的读/写

vmstat -d

这些信息主要来自于/proc/diskstats.

merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作

[root@master ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda    16740      4 2656790   43417 283286   9061 4006396  224355      0    124
sr0        0      0       0       0      0      0       0       0      0      0
dm-0   14435      0 2592710   42246 292337      0 4002259  246995      0    124
dm-1      86      0    4144     229      0      0       0       0      0      0

4.6 查看/dev/sda1磁盘的读/写

df -h
vmstat -p /dev/sda1

这些信息主要来自于/proc/diskstats

  • reads:来自于这个分区的读的次数。
  • read sectors:来自于这个分区的读扇区的次数。
  • writes:来自于这个分区的写的次数。
  • requested writes:来自于这个分区的写请求次数。
[root@master ~]# vmstat -p /dev/sda1
sda1          reads   read sectors  writes    requested writes
                2115      52608         10       4137

4.7 查看系统的slab信息

vmstat -m


这组信息来自于/proc/slabinfo。


slab:由于内核会有许多小对象,这些对象构造销毁十分频繁,


比如i-node,dentry,这些对象如果每次构建的时候就向内存要一个页(4kb),


而其实只有几个字节,这样就会非常浪费,为了解决这个问题,就引入了一种新的机制来处理在同一个页框中如何分配小存储区,


而slab可以对小对象进行分配,这样就不用为每一个对象分配页框,从而节省了空间,内核对一些小对象创建析构很频繁,


slab对这些小对象进行缓冲,可以重复利用,减少内存分配次数。

[root@master ~]# vmstat -m
Cache                       Num  Total   Size  Pages
nf_conntrack_ffff9b1ef89e2900    765    765    320     51
nf_conntrack_ffff9b1ef89e1480    612    612    320     51
nf_conntrack_ffffffff87511640   1275  21369    320     51
ovl_inode                  3984  41232    680     48
rpc_inode_cache              51     51    640     51
xfs_dqtrx                     0      0    528     62
xfs_dquot                     0      0    488     67
xfs_ili                    3552  22752    168     48
xfs_inode                  8126  23052    960     34
xfs_efd_item                468   2652    416     39
xfs_log_ticket              352    352    184     44
bio-3                       204    204    320     51
kcopyd_job                    0      0   3312      9
dm_uevent                     0      0   2608     12
dm_rq_target_io               0      0    136     60
ip6_dst_cache               648    648    448     36
RAWv6                       572    572   1216     26
UDPLITEv6                     0      0   1216     26
UDPv6                       104    104   1216     26
tw_sock_TCPv6               128    128    256     64
TCPv6                       180    180   2112     15
Cache                       Num  Total   Size  Pages
cfq_queue                     0      0    232     70
bsg_cmd                       0      0    312     52
mqueue_inode_cache           72     72    896     36
hugetlbfs_inode_cache       106    106    608     53
configfs_dir_cache            0      0     88     46
dquot                         0      0    256     64
kioctx                       56     56    576     56
userfaultfd_ctx_cache         0      0    192     42
pid_namespace                28     28   2200     14
posix_timers_cache          264   7920    248     66
UDP-Lite                      0      0   1088     30
flow_cache                    0      0    144     56
UDP                         180    180   1088     30
tw_sock_TCP                 384    576    256     64
TCP                         336   2112   1984     16
dax_cache                    84     84    768     42
blkdev_queue                 39     39   2456     13
blkdev_ioc                  663    663    104     39
user_namespace              136    136    480     68
sock_inode_cache           3570   3570    640     51
fsnotify_mark_connector     680    680     24    170
Cache                       Num  Total   Size  Pages
net_namespace                12     12   5248      6
shmem_inode_cache          3170  13248    680     48
Acpi-State                  510    510     80     51
task_delay_info            2124   2124    112     36
taskstats                   147    147    328     49
proc_inode_cache           3599   4067    656     49
sigqueue                    102    102    160     51
bdev_cache                   78     78    832     39
kernfs_node_cache        192916 192916    120     68
mnt_cache                  3324   8652    384     42
inode_cache               27938  27995    592     55
dentry                    59658 124110    192     42
iint_cache                    0      0    128     64
avc_xperms_node            1462   1533     56     73
avc_node                   8400   8400     72     56
selinux_inode_security    21828  22542     40    102
buffer_head               47395  61815    104     39
vm_area_struct             7655   8399    216     37
mm_struct                   664    900   1600     20
files_cache                1785   1785    640     51
signal_cache                910   1008   1152     28
Cache                       Num  Total   Size  Pages
sighand_cache               623    660   2112     15
task_xstate                1516   1530   1088     30
task_struct                 790    826   4160      7
anon_vma                   4336   5049     80     51
shared_policy_node         3061   3145     48     85
numa_policy                 186    186    264     62
radix_tree_node            7501  15400    584     56
idr_layer_cache             660    660   2112     15
dma-kmalloc-8192              0      0   8192      4
dma-kmalloc-4096              0      0   4096      8
dma-kmalloc-2048              0      0   2048     16
dma-kmalloc-1024              0      0   1024     32
dma-kmalloc-512              64     64    512     64
dma-kmalloc-256               0      0    256     64
dma-kmalloc-128               0      0    128     64
dma-kmalloc-64                0      0     64     64
dma-kmalloc-32                0      0     32    128
dma-kmalloc-16                0      0     16    256
dma-kmalloc-8                 0      0      8    512
dma-kmalloc-192               0      0    192     42
dma-kmalloc-96                0      0     96     42
Cache                       Num  Total   Size  Pages
kmalloc-8192                 80     80   8192      4
kmalloc-4096               1051   1080   4096      8
kmalloc-2048              18183  19136   2048     16
kmalloc-1024               6359  21184   1024     32
kmalloc-512               25749  68800    512     64
kmalloc-256               28071  39040    256     64
kmalloc-192               30717  57120    192     42
kmalloc-128               17497  39744    128     64
kmalloc-96                45512  64722     96     42
kmalloc-64                39073 114368     64     64
kmalloc-32                 8994  88064     32    128
kmalloc-16                19200  19200     16    256
kmalloc-8                 20992  20992      8    512
kmem_cache_node            5056   5056     64     64
kmem_cache                 4992   4992    256     64

参考:

相关文章
|
7天前
|
Web App开发 监控 JavaScript
监控和分析 JavaScript 内存使用情况
【10月更文挑战第30天】通过使用上述的浏览器开发者工具、性能分析工具和内存泄漏检测工具,可以有效地监控和分析JavaScript内存使用情况,及时发现和解决内存泄漏、过度内存消耗等问题,从而提高JavaScript应用程序的性能和稳定性。在实际开发中,可以根据具体的需求和场景选择合适的工具和方法来进行内存监控和分析。
|
5天前
|
算法 Linux 开发者
深入探究Linux内核中的内存管理机制
本文旨在对Linux操作系统的内存管理机制进行深入分析,探讨其如何通过高效的内存分配和回收策略来优化系统性能。文章将详细介绍Linux内核中内存管理的关键技术点,包括物理内存与虚拟内存的映射、页面置换算法、以及内存碎片的处理方法等。通过对这些技术点的解析,本文旨在为读者提供一个清晰的Linux内存管理框架,帮助理解其在现代计算环境中的重要性和应用。
|
11天前
|
存储 缓存 监控
|
30天前
|
存储 缓存 监控
Linux中内存和性能问题
【10月更文挑战第5天】
37 4
|
29天前
|
算法 Linux
Linux中内存问题
【10月更文挑战第6天】
39 2
|
8天前
|
缓存 算法 Linux
Linux内核中的内存管理机制深度剖析####
【10月更文挑战第28天】 本文深入探讨了Linux操作系统的心脏——内核,聚焦其内存管理机制的奥秘。不同于传统摘要的概述方式,本文将以一次虚拟的内存分配请求为引子,逐步揭开Linux如何高效、安全地管理着从微小嵌入式设备到庞大数据中心数以千计程序的内存需求。通过这段旅程,读者将直观感受到Linux内存管理的精妙设计与强大能力,以及它是如何在复杂多变的环境中保持系统稳定与性能优化的。 ####
16 0
|
30天前
|
存储 缓存 固态存储
|
17天前
|
监控 数据可视化 Java
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
|
1月前
|
监控 安全 Linux
使用NRPE和Nagios监控Linux系统资源的方法
通过遵循以上步骤,可以有效地使用NRPE和Nagios监控Linux系统资源,确保系统运行稳定,并及时响应任何潜在的问题。这种方法提供了高度的可定制性和灵活性,适用于从小型环境到大型分布式系统的各种监控需求。
43 2
|
1月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
44 0
下一篇
无影云桌面