vmstat

最近遇到了机器特别卡,请求发到服务器收不到响应的情况,总结了下 vmstat 定位系统性能问题的用法

快速上手

[root@VM_80_251_centos ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0      0  86704 283040 1354508    0    0     1    16    5    0  0  0 99  0  0
 0  0      0  86712 283040 1354508    0    0     0    12  231  327  1  0 99  0  0
 0  0      0  86712 283040 1354508    0    0     0     0  193  265  0  0 100  0  0
 0  0      0  86712 283040 1354512    0    0     0     0  173  235  0  1 99  0  0
  • r : 运行队列进程个数
  • si: 每秒交换分区写入内存量
  • so: 每秒内存写交换分区的量
  • bi: 每秒从块设备读取的块数量
  • bo: 每秒写入块设备的块数量
  • id: cpu 空闲状态百分比
  • wa: 等待io 所消耗的cpu 时间
  • st: 用于虚拟机,如果你的机器是虚拟化设备,虚拟 CPU 等待实际 CPU 的时间的百分比

这些指标我们在 top 里面也是可以看到的

top - 10:09:07 up 56 days, 22:11,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  82 total,   1 running,  81 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.3 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1882860 total,    74976 free,   165392 used,  1642492 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1495532 avail Mem

第一行数字

当服务器出现问题,我们用vmstat 1 查找问题的时候,第一行数字是不可信的,指服务器启动至今各项指标的平均值,忽略这一行

怎么算正常,什么情况是有问题

  • cache数值大

cache数值大表示系统缓存了很多磁盘数据,利于磁盘IO的提升,这时候bi 应该会比较小,因为很多读磁盘的操作由cache 承担了

  • si/so 比较大

si/so 表示读写 swap的量,如果有应该是物理内存不够了,要操作交换分区

  • us > 50%

说明用户进程占用时间较多,代码需要优化

  • wa 较高

说明系统的此时系统的瓶颈在等待IO操作,磁盘成为主要瓶颈

  • r > cpu 核数

正在运行的队列任务数大于cpu核数,cpu成为性能瓶颈

  • us/sy 比较大可能也是正常的

如果在进行视频编解码,us会比较大,大于90%;如果要产生大量随机数,sy会比较大