Linux 磁盘告警分析

硬件配置

cat /etc/redhat-release && dmidecode -s system-product-name && cat /proc/cpuinfo |grep "processor"|wc -l
版本      CentOS Linux release 7.2.1511 (Core) 
虚拟化     VMware Virtual Platform
cpu核数   2

背景

配置如上所示的虚拟机在每天凌晨03-04时间段内发现磁盘告警。由于监控数据是概要类信息,不是快照类信息,无法排除出是否是某个或某几个进程在这段时间消耗了大量的IO,所以在服务器上用at命令定时去收集信息

sar -d 2和pidstat -d 2 信息
937ace126b673355dd045b527b553c1a.png937ace126b673355dd045b527b553c1a.png

%iowait 达到50%左右,在该时间的读写却并不大

53a17646a4f1a504ad465713ee542fff.png

iostat -dx -m 1信息

53a17646a4f1a504ad465713ee542fff.png

IOPS很小,每秒读写量很小,单个IO请求完成所需时间await(该值包含在队列中等待的时间和磁盘处理IO时间)却很高
这很奇怪,一般await较高的情况属于IOPS很高,每秒IO读写量大,达到磁盘瓶颈


546a6129faf58d9ddcd048d6ca72497a.png546a6129faf58d9ddcd048d6ca72497a.png

2核cpu的负载在%iowait高时有上升

%iowait的含义

%iowait

Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
在一个采样周期内有百分之几的时间属于以下情况:CPU空闲、并且有仍未完成的I/O请求

b5f61e7145a6cbb34f1bdc32a536db3b.pngb5f61e7145a6cbb34f1bdc32a536db3b.png

在I/O完全一样的情况下,CPU忙闲状态的变化就能够影响 %iowait 的大小。下图我们看到,在CPU繁忙期间发生的I/O,无论有多少,%iowait 的值都是不受影响的(因为 %iowait 的第一个前提条件就是CPU必须空闲);当CPU繁忙程度下降时,有一部分I/O落入了CPU空闲的时间段内,这就导致了 %iowait 升高

3c4ae87f5aa71f52e1356677e67869a2.png3c4ae87f5aa71f52e1356677e67869a2.png

如果2个I/O请求依次提交、使得整个时段内始终有I/O在进行,那么 %iowait 是100%;
如果3个I/O请求同时提交,因为系统有能力同时处理多个I/O,所以3个并发的I/O从开始到结束的时间与一个I/O一样,%iowait 的结果只有50%。
2个I/O使 %iowait 达到了100%,3个I/O的 %iowait 却只有50%,显然 %iowait 的高低与I/O的多少没有必然关系,而是与I/O的并发度相关
如果看到 %iowait 升高,还需检查I/O量有没有明显增加,avserv/avwait/avque等指标有没有明显增大

结论

  • 该虚拟机在每秒io请求量并不大的情况下(cpu负载较高),%iowait达到50左右,推断是cpu核数低,I/O能力差,该虚拟机所在的宿主机发生性能抖动(争抢IO资源)导致的
  • 异常情况的出现,除了有内因在作用外,外因有时也在推波助澜

参考

理解 %iowait

容易被误读的IOSTAT

 

posted on 2019-03-21 21:28 Jia-Xin 阅读(...) 评论(...) 编辑 收藏

导航

公告