参考 http://www.cnblogs.com/echo1937/p/6240020.html


%iowait 的正确认知


%iowait 表示在一个采样周期内有百分之几的时间属于以下情况:CPU空闲、并且有仍未完成的I/O请求。


对 %iowait 常见的误解有两个:

  一是误以为 %iowait 表示CPU不能工作的时间,

  二是误以为 %iowait 表示I/O有瓶颈。


首先 %iowait 升高并不能证明等待I/O的进程数量增多了,也不能证明等待I/O的总时间增加了。

  例如,在CPU繁忙期间发生的I/O,无论IO是多还是少,%iowait都不会变;当CPU繁忙程度下降时,有一部分IO落入CPU空闲时间段内,导致%iowait升高。

  再比如,IO的并发度低,%iowait就高;IO的并发度高,%iowait可能就比较低。


可见%iowait是一个非常模糊的指标,如果看到 %iowait 升高,还需检查I/O量有没有明显增加,avserv/avwait/avque等指标有没有明显增大,应用有没有感觉变慢,如果都没有,就没什么好担心的



查看CPU使用率,推荐如下Linux命令:

# top

# sar -u 1 5

# vmstat -n 1 5

# mpstat -P ALL 1 5


查看Load的值,推荐如下Linux命令:

# top

# uptime

# sar -q 1 5


简单的说,sar -u看出来的cpu利用率iowait 不实用,iostat -x 中的 svctm   和util 参数

命令形式: iostat -x 1


其中的svctm参数代表平均每次设备I/O操作的服务时间 (毫秒),反应了磁盘的负载情况,如果该项大于15ms,并且util%接近100%,那就说明,磁盘现在是整个系统性能的瓶颈了。

await 参数代表平均每次设备I/O操作的等待时间 (毫秒), 也要多和 svctm 来参考。差的过高就一定有 IO 的问题。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢。


svctm一项正常时间在20ms左右,原因:

高速cpu会造成很高的iowait值,但这并不代表磁盘是系统的瓶颈。唯一能说明磁盘是系统瓶颈的方法,就是很高的read/write时间,一般来说超过20ms,就代表了不太正常的磁盘性能。为什么是20ms呢?一般来说,一次读写就是一次寻到+一次旋转延迟+数据传输的时间。由于,现代硬盘数据传输就是几微秒或者几十微秒的事情,远远小于寻道时间2~20ms和旋转延迟4~8ms,所以只计算这两个时间就差不多了,也就是15~20ms。只要大于20ms,就必须考虑是否交给磁盘读写的次数太多,导致磁盘性能降低了。


%iowait并不能反应磁盘瓶颈

iowait实际测量的是cpu时间:

%iowait = (cpu idle time)/(all cpu time)