vmstat:虚拟内存统计

xiaohai 2021-07-24 16:38:52 2891人围观 标签: Linux 
简介vmstat是Virtual Memory Statistics(虚拟内存统计)的缩写,利用该命令可以对操作系统的内存信息、进程状态和CPU活动等进行监视。但是只能对系统的整理情况进行统计,无法对某个进程进行深入的分析。
说明

  vmstat是Virtual Memory Statistics(虚拟内存统计)的缩写,利用该命令可以对操作系统的内存信息、进程状态和CPU活动等进行监视。但是只能对系统的整理情况进行统计,无法对某个进程进行深入的分析。

格式

  vmstat [option] [delay时间间隔 [count次数]]

参数说明
  • -a:显示活跃和非活跃内存
  • -f:显示启动后创建的进程总数;
  • -m:显示slab信息;
  • -n:头信息仅显示一次;
  • -s:以表格方式显示事件计数器和内存状态;
  • -d:报告磁盘状态;
  • -p:显示指定的硬盘分区状态;
  • -S:输出信息的单位,参数有k、K、m、M
  • -t:统计信息带上时间戳
示例

1、显示虚拟内存的使用情况

[root@localhost ~]# vmstat    #如果省略"间隔时间"和"次数",则只显示一次报告就退出
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0  25632  75756      0 156272    0    1    15    10   74  155  0  0 99  0  0
[root@localhost ~]# 
[root@localhost ~]# vmstat 5 #表示每隔5s就更新一次输出信息
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0  25632  75756      0 156272    0    1    15    10   74  155  0  0 99  0  0
 0  0  25632  75716      0 156272    0    0     0     0   72  150  0  0 99  0  0
 0  0  25632  75716      0 156272    0    0     0     0   74  146  0  1 99  0  0
 0  0  25632  75716      0 156272    0    0     0     1   80  158  0  0 99  0  0
^C
[root@localhost ~]# vmstat 5 2 #表示每隔5s就更新一次输出信息,统计2次就退出
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0  25632  75756      0 156272    0    1    15    10   74  155  0  0 99  0  0
10  0  25632  75716      0 156272    0    0     0     0   81  157  0  1 99  0  0

字段说明:
Procs(进程)

  • r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
  • b: 等待IO的进程数量。

Memory(内存)

  • swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
  • free: 空闲物理内存大小。
  • buff: 用作缓冲的内存大小。
  • cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。

Swap

  • si: 每秒从交换区写到内存的大小,由磁盘调入内存。
  • so: 每秒写入交换区的内存大小,由内存调入磁盘。
    注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

IO(现在的Linux版本块的大小为1kb)

  • bi: 每秒读取的块数
  • bo: 每秒写入的块数
    注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

system(系统)

  • in: 每秒中断数,包括时钟中断。
  • cs: 每秒上下文切换数。
    注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。

CPU(以百分比表示)

  • us: 用户进程执行时间百分比(user time),us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
  • sy: 内核系统进程执行时间百分比(system time),sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
  • id: 空闲时间百分比
  • wa: IO等待时间百分比,wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
  • st:显示虚拟机占用的CPU的百分比

2、显示活跃和非活跃内存

[root@localhost ~]# 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
 2  0  25632  75756 387552 351732    0    1    15    10   74  154  0  0 99  0  0
 0  0  25632  75716 387552 351760    0    0     0     0   74  156  0  1 99  0  0
 0  0  25632  75716 387552 351760    0    0     0     0   70  143  1  0 99  0  0
 2  0  25632  75716 387552 351760    0    0     0    10   74  145  1  1 98  0  0
 0  0  25632  75716 387552 351760    0    0     0     0   70  142  1  1 99  0  0

使用-a参数后,memory列增加了inact和active两列,说明如下:

  • inact:非活跃的内存大小
  • active:活跃的内存大小

3、显示内存使用的详细信息

[root@localhost ~]# vmstat -s
      1003420 K total memory
       927672 K used memory
       351696 K active memory
       387552 K inactive memory
        75748 K free memory
            0 K buffer memory
       156292 K swap cache
      2097148 K total swap
        25632 K used swap
      2071516 K free swap
        11280 non-nice user cpu ticks
           30 nice user cpu ticks
        13100 system cpu ticks
      4629302 idle cpu ticks
         3865 IO-wait cpu ticks
            5 IRQ cpu ticks
         6443 softirq cpu ticks
            0 stolen cpu ticks
       697257 pages paged in
       482707 pages paged out
          918 pages swapped in
         6862 pages swapped out
      3440441 interrupts
      7204747 CPU context switches
   1529832950 boot time
         4730 forks

这些信息都来自于/proc/meminfo、/proc/stat和/proc/vmstat

4、查看磁盘的读写

[root@localhost ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda    19783   1488 1394419  230919   9319   7438  965450  257332      0    111
sr0       12      0      96     326      0      0       0       0      0      0
dm-0    1139      0    9112   34344   6862      0   54896  393039      0      6
dm-1   17811      0 1373937  228308   7838      0  906432  268297      0    110

这些信息主要来源于/proc/diskstats。启动merged表示一次来自于合并的写/读请求,系统会把多个连接/邻近的读/写请求合并到一起来操作

5、查看/dev/sha1磁盘的读写统计信息

[root@localhost ~]# vmstat -p /dev/sda1
sda1          reads   read sectors  writes    requested writes
                2065       9226       2057       4122

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

  • reads:来自于该分区读的次数
  • read sectors:来自于该分区的读扇区的次数
  • writes:来自于该分区的写的次数
  • requested writes:来自于该分区的写请求次数