如果iostat显示100%忙等待但CPU完全空闲,这是什么意思?

如果iostat显示100%忙等待但CPU完全空闲,这是什么意思? 我的应用程序运行了一段时间,然后进入这个状态周期约10-20秒。

它是solaris 10上的事务处理C ++应用程序。

IO stat output: extended device statistics cpu device r/sw/s kr/s kw/s wait actv svc_t %w %b us sy wt id c0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0 0 100 sd1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c6 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0 100 sd19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd19.fp2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd19.fp4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd20 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd23 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0 100 sd24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd26 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd27 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 

vmstat输出:

 kthr memory page disk faults cpu rbw swap free re mf pi po fr de sr s0 s1 s2 s3 in sy cs us sy id 0 0 0 10842364 33093436 30 188 0 0 0 0 65 -0 2 3 -0 1327 843 709 0 1 99 0 0 0 3406728 28181464 71 3601 0 0 0 0 0 0 0 0 0 1372 23009 1584 4 0 96 0 0 0 2702996 28030080 0 740 0 0 0 0 0 0 0 0 0 1414 15002 2065 6 0 93 0 0 0 2699448 28016628 0 3 0 0 0 0 0 0 0 0 0 1747 3012 2193 9 1 90 0 0 0 2691728 28009844 0 1 0 0 0 0 0 0 10 10 0 2315 1300 2877 2 0 97 0 1 0 2679788 27957836 0 5033 0 0 0 0 0 0 1 1 0 1895 1945 2658 10 0 90 0 2 0 2654188 27907196 0 0 0 0 0 0 0 0 1 1 0 3566 3788 5495 2 0 98 

这意味着负载是由于IO等待,而不是CPU争用。 因此,访问硬盘,访问NFS共享,访问交换空间(因此(通常)本地硬盘驱动器…我不确定纯净的networking访问是否有助于这一点,但我的直觉说不。因为它使用了FS层,“top”通常有一个“wait”或“iowait”的百分比,通常会显示出来。

IO统计不应该是100%。 如果您的磁盘IO数量很大,可能会很高,超过50%,但通常100%意味着您的IO子系统出了问题。 当我在硬盘出现故障的早期阶段,硬盘需要更长,更长的时间来响应请求时,这一切都发生在我身上,但仍然有所反应。

或者它可能只是一个非常糟糕的应用程序。 一个简单的DTrace脚本应该告诉你它是哪一个。

可以驱动IO负载非常高的一件事就是分页。 您的应用程序是否消耗了所有的物理内存,并导致机器难以翻页?

 vmstat 5 

如果si和其他列显示0以外的任何东西,那么你机器是分页(可能很多)。