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会比较大