日期:2014-05-16  浏览次数:20740 次

在linux系统中跟踪高IO等待

原文作者:Jon Buys

原文地址:http://ostatic.com/blog/tracking-down-high-io-wait-in-linux 

译者:Younger Liu,本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。 

       跟踪大型分布式系统的性能问题,从本质上来讲是复杂的。应用为什么慢?瓶颈在哪里?以我的经验,最主要的罪魁祸首之一是高IO等待(即high IO wait)。换一个地方用Dr. Seuss的话来说:每个人都只是在等待[翻译参考文献1]

        高IO等待问题的第一个征兆通常是系统平均负载。负载均衡的计算都是基于CPU利用率的,即使用或等待CPU的进程数目,当然,在Linux平台上,进程几乎都处于不可中断的睡眠状态。负载均衡的基线可以解释为,在一个CPU核的机器上上,该CPU得到充分利用。因此,对于4核机器中,如果系统平均复杂为4,表示该机器有足够的资源来处理它需要做的工作,当然只是勉强。在相同的4核系统,如果平均复杂是8,那么以为这将意味着服务器系统需要8core才能处理所要做的工作,但现在只有4个核,所以已经超载。

        如果系统显示平均负载较高,但是CPU的系统(system)和用户(user)利用率较低,那么就需要观察IO等待(IO wait)。在linuc系统上,IO wait对系统负载有较大的影响,主要因为一个或多个核都可能被磁盘IO或网络IO所阻塞,只有当磁盘IO或网络IO完成后,这些核上的任务(即进程)才能进行下去。而这些进程使用ps aux来查看均处于”D”状态,即不可中断的睡眠状态。

        发现进程在等待IO完成是一回事,验证高IO wait的原因是另一回事。使用”iostat –x 1”能够显示正在使用的物理存储设备的IO情况:

[username@server~]$ iostat -x 1

         Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

         cciss/c0d0        0.08     5.94  1.28  2.75    17.34    69.52    21.60     0.11   26.82   4.12   1.66

         cciss/c0d0p1      0.00     0.00  0.00&n