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

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

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

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

IO stat output:
                  extended device statistics                       cpu
device      r/s    w/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 
r b w   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 

答案1

这意味着负载是由于 IO 等待而不是 CPU 争用造成的。因此,访问硬盘、访问 NFS 共享、访问交换空间(因此(通常)是本地硬盘...我不确定纯网络访问是否会导致这种情况,但我的直觉告诉我不会。NFS 只是增加了这种情况,因为它使用了 FS 层。“top”通常有一个“wait”或“iowait”百分比,通常会显示这种情况。

答案2

IO Stat 不应该是 100%。如果磁盘 IO 量很大,该值可能会很高,超过 50%,但恰好 100% 通常意味着 IO 子系统出了问题。当我的硬盘处于故障的早期阶段时,这种情况就发生在我身上,此时磁盘响应请求的时间越来越长,但仍然有响应。

或者它可能只是一个非常编写糟糕的应用程序。一个简单的 DTrace 脚本应该可以告诉您这是哪一种情况。

答案3

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

vmstat 5

如果siso列显示除之外的任何内容0,则表明您的机器正在进行分页(可能很多)。

相关内容