最近遇到了机器特别卡,请求发到服务器收不到响应的情况,总结了下 vmstat 定位系统性能问题的用法
快速上手
1 | [root@VM_80_251_centos ~]# vmstat 1 |
- r : 运行队列进程个数
- si: 每秒交换分区写入内存量
- so: 每秒内存写交换分区的量
- bi: 每秒从块设备读取的块数量
- bo: 每秒写入块设备的块数量
- id: cpu 空闲状态百分比
- wa: 等待io 所消耗的cpu 时间
- st: 用于虚拟机,如果你的机器是虚拟化设备,虚拟 CPU 等待实际 CPU 的时间的百分比
这些指标我们在 top 里面也是可以看到的
1 | top - 10:09:07 up 56 days, 22:11, 1 user, load average: 0.00, 0.01, 0.05 |
第一行数字
当服务器出现问题,我们用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会比较大