命令 vmstat 查看系统负载

前言

命令 w 查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力。当它无法判断具体是哪里 (CPU,内存,磁盘等) 有压力,所以这就用到了 vmstat。

命令 vmstat 用法

  • 静态显示内存状态一次。
[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      0 697884    948 175948    0    0    18     2   49   83  0  0 99  0  0

  • vmstat [n] 在此 n 代表数字,意思是每隔 n 秒输出一次状态 (按 Ctrl+c 结束命令)。
[root@localhost ~]# vmstat 1    //如果不Ctrl+c每1秒钟会显示一行。
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      0 697756    948 175968    0    0    17     2   48   82  0  0 100  0  0
 0  0      0 697756    948 175968    0    0     0     0   28   43  0  0 100  0  0

  • vmstat [n][m] 这里的 n 表示每隔 n 秒输出一次状态,m 表示动态显示的次数;
[root@localhost ~]# vmstat 1 5
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      0 697764    948 175960    0    0    17     2   48   81  0  0 100  0  0
 0  0      0 697764    948 175960    0    0     0     0   33   56  0  0 100  0  0
 0  0      0 697764    948 175960    0    0     0     0   28   33  0  1 99  0  0
 0  0      0 697764    948 175960    0    0     0     0   25   35  0  0 100  0  0
 0  0      0 697764    948 175960    0    0     0     0   25   32  0  0 100  0  0

说明:

proc 显示进程相关信息

  • r:=run,表示运行中或等待 cpu 运行的进程数,如果该数长期大于服务器 CPU 个数,则说明 CPU 不够用了;
  • b: =block ,表示等待资源的进程数,如,等待 I/O,内存等,这列的值如果长时间大于 1,则需要关注一下;

memory 内存相关信息

  • swpd:表示切换到交换分区的内存量(当该数据不断变化时说明内存不足);
  • free:表示当前空闲的内存量;
  • buff:缓冲大小;
  • cache:缓存大小;

swap 内存交换情况

  • si:=storage in,表示交换区写入到内存的数据量;
  • so:=storage out,表示由内存写入到交换区的数据量;

io 磁盘使用情况

  • bi:=block in,表示从块设备读取数据(写入内存)的量(即:读磁盘),单位为 KB;
  • bo:=block out,表示(从内存读取)写入到块设备的数据(即:写磁盘),单位为 KB;
    注: 此处数据会直接关系到 proc 出的 b 的值。

system 显示采集间隔内发生的中断次数

  • in:表示在某一时间间隔中观测到的每秒设备中断数;
  • cs:表示每秒产生的上下文切换次数;

CPU 显示 CPU 的使用状态(us+sy+id=100%)

  • us:表示用户资源所花费 CPU 的百分比(当该值长时间 >50 时说明 CPU 数量不足);
  • sy:表示系统资源所花费 CPU 的百分比;
  • id:表示 CPU 处于空闲状态的百分比;
  • wa:=wait,表示等待使用 CPU 的百分比(该数值大说明 CPU 不足);
  • st:表示被偷走的 CPU 所占百分比(该值一般为 0,不用关注);

注意:需要关注的是 r,b 和 wa 这 3 列,io 部分和 bi 和 bo 也是要经常参考的对象,如果磁盘 io 压力很大,这两列的数值会比较高(大于 5 千算高)。另外,当 si 和 so 两列的数值比较高并且不断变化时,说明内存不够了,内存中的数据频繁交换分区中,这往往对系统性能影响极大。