背景
随着公司站点的发展,用户和访问量日益增加,经常会出现数据库主从出现延迟的情况,例如,用户在点击充值页进行充值时,经常会出现充值不到账的情况,针对这个问题,对数据库进行排查,发现,磁盘IO极不稳定,iowait也很高,%util一直在90左右,这说明产生的I/O请求很多,IO已经满负荷,磁盘IO存在瓶颈。所以需要加一块SSD盘,来提高IO处理速度。
磁盘IO情况检测
可以结合vmstat
和iostat
来判断IO和cpu的一些情况,例如:
vmstat 1 100
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 144716 133152 3805212 0 0 485 1565 2 2 3 1 90 6 0
1 0 0 140188 133152 3808372 0 0 59940 744 2252 1537 42 2 36 20 0
1 0 0 146236 133152 3803568 0 0 37632 7384 2434 1969 45 2 39 14 0
1 1 0 120212 133152 3830100 0 0 26656 304 1469 1144 18 1 35 46 0
1 0 0 143180 133156 3804948 0 0 48004 804 2292 1577 43 2 41 14 0
0 1 0 158224 133156 3791228 0 0 28796 7988 2514 2212 45 2 37 17 0
r 表示运行队列,即多少个进程分配到了CPU,如果超过CPU核数,就会出现CPU瓶颈了
b 表示阻塞的进程
si 每秒从磁盘读入虚拟内存的大小,大于0,表示物理内存不够用或者内存泄漏
so 表示从磁盘每秒写入虚拟内存的大小,大于0,同上
bi 表示系统上所有的磁盘和其他块设备上每秒读入的总量
bo 表示所有磁盘上每秒写入的总量
in 每秒CPU中断的次数,包括时间中断
us 表示用户进程消耗的CPU时间百分比,us值越高,说明用户进程消耗CPU时间越多,如果长期大于50%,则需要考虑优化程序或者算法
sy 表示系统内核进程消耗的CPU时间百分比,一般来说us sy应该小于80%,如果大于80%,说明可能存在CPU瓶颈
id 表示CPU处在空间状态的时间百分比
wa 表示IO等待所占用的CPU时间百分比,wa值越高,说明I/O等待越严重,根据经验wa的参考值为20%,如果超过20%,说明I/O等待严重,引起I/O等待的原因可能是磁盘大量随机读写造成的
综上,我们在判断IO问题的时候,参考bi
、bo
、wa
便可以判断IO的情况。
再来看下iostat
的使用:
iostat -x -k 1 100
Linux 3.10.0-693.2.2.el7.x86_64 (xs_88_55) 05/08/2018 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
3.07 0.00 0.92 5.72 0.00 90.30
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.01 83.24 7.92 199.19 954.62 3104.95 39.20 0.53 2.57 31.62 1.42 0.62 12.84
vdb 0.00 0.07 0.05 0.13 12.04 11.01 256.26 0.01 49.74 19.07 60.37 1.13 0.02
avg-cpu: %user %nice %system %iowait %steal %idle
1.01 0.00 0.51 2.53 0.00 95.96
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 4.00 30.00 2.00 124.00 24.00 9.25 0.03 0.78 0.77 1.00 0.09 0.30
vdb 0.00 83.00 8.00 119.00 68.00 828.00 14.11 0.07 0.53 0.62 0.52 0.53 6.70
avg-cpu: %user %nice %system %iowait %steal %idle
1.00 0.00 0.50 2.49 0.00 96.02
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 61.00 14.00 88.00 152.00 632.00 15.37 0.05 0.46 0.50 0.45 0.46 4.70
%user:应用程序使用CPU的时间占比
%system:内核程序使用CPU的时间占比。
%iowait:CPU花费了多少时间去等待磁盘IO
%util: 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态
综上,在看IO时,关注iowait
和util
来判断IO情况。