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 信息
%iowait 达到50%左右,在该时间的读写却并不大
iostat -dx -m 1信息
IOPS很小,每秒读写量很小,单个IO请求完成所需时间await(该值包含在队列中等待的时间和磁盘处理IO时间)却很高
这很奇怪,一般await较高的情况属于IOPS很高,每秒IO读写量大,达到磁盘瓶颈
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请求
在I/O完全一样的情况下,CPU忙闲状态的变化就能够影响 %iowait 的大小。下图我们看到,在CPU繁忙期间发生的I/O,无论有多少,%iowait 的值都是不受影响的(因为 %iowait 的第一个前提条件就是CPU必须空闲);当CPU繁忙程度下降时,有一部分I/O落入了CPU空闲的时间段内,这就导致了 %iowait 升高
如果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资源)导致的
- 异常情况的出现,除了有内因在作用外,外因有时也在推波助澜
参考