查找 Linux 中 100% iowait 的根本原因

查找 Linux 中 100% iowait 的根本原因

我有一个几年前的系统,运行的是 Fedora 7(我知道,它也很旧)。现在我运行的是 PS3 Media Server(还有一些其他东西,如 Vmware 和 Plone),我注意到流媒体电影出现了意外中断。

通常,该系统的读写速度为 25-30 MiB/秒。我发现(见下文)有时一切都会停止 15-30 秒。我查看了这里的其他问题和答案,但找不到任何可能出错的提示(软件方面)。我在这里所做的是打开一部电影并搜索到稍后的点。我的 PS3 使用媒体服务器获取每分钟的缩略图,以便我搜索到所需的场景。

下面我看到的是,这个简单的操作使整个系统陷入停顿。整个系统停止等待 IO。此外,上下文切换的数量急剧下降到大约 650。我检查了系统是否在交换或在日志文件中报告任何错误或警告。我还没有发现任何似乎相关的东西。

我使用 iotop 来获取更多信息,我发现所有正在运行的应用程序,在执行每秒少量 KiB 的 IO 时,IOWAIT 突然变为 99%,而不是正常的 0.01%。

此刻我最好的猜测是硬件(硬盘)出现故障。

我想问你们:我怎样才能找出真正的问题是什么?

系统信息:Intel Pentium D CPU 2.80GHz Linux 存储 2.6.22.1-27.fc7 #1 SMP Tue Jul 17 17:13:26 EDT 2007 i686 i686 i386 GNU/Linux

我的系统上 dstat -f 的输出示例。

-------cpu0-usage--------------cpu1-usage------ --dsk/sda-----dsk/sdb-----dsk/sdc-----dsk/sdd-- ---paging-- ---system-->
usr sys idl wai hiq siq:usr sys idl wai hiq siq| read  writ: read  writ: read  writ: read  writ|  in   out | int   csw >
  3  12  84   1   0   0:  2  14  83   1   0   0|4096B   68k:  32k    0 :   0     0 :   0     0 |   0     0 | 125  4903 >
  0   6  94   0   0   0:  1   8  91   0   0   0|   0  8192B:  16k    0 :   0     0 :   0     0 |   0     0 | 109  3734 >
  0   2  96   2   0   0:  0   1  96   0   1   2|4096B   28k:1040k    0 :   0     0 :   0     0 |   0     0 | 998  3969 >
  0   2  98   0   0   0:  1   0  97   2   0   0|   0     0 :  32k    0 :   0     0 :   0     0 |   0     0 | 115  3805 >
  1   1  98   0   0   0:  0   4  96   0   0   0|   0     0 :  32k    0 :   0     0 :   0     0 |   0     0 | 121  3850 >
  1   3  96   0   0   0:  2   4  80   0   2  12|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |8110  5076 >
  1   3  40  55   0   1:  1   2  32  57   1   7|   0   716k:2656k    0 :   0     0 :   0     0 |   0     0 |4213  4562 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0    56k:   0     0 :   0     0 :   0     0 |   0     0 |  78   833 >
  0   0  85  15   0   0:  0   0   0 100   0   0|   0    16k:   0     0 :   0     0 :   0     0 |   0     0 |  74   623 >
  0   0 100   0   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  65   572 >
  0   0  14  86   0   0:  0   0   0 100   0   0|   0    56k:   0     0 :   0     0 :   0     0 |   0     0 |  82   717 >
  1   0   0  99   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  69   583 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  69   576 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  73   586 >
  1   0   0  99   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  70   587 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  70   593 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  70   578 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  64   586 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  66   586 >
  1   0  11  88   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  63   575 >
  0   1  99   0   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  64   568 >
  0   0  79  21   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  65   571 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  64   574 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  65   581 >
  1   0   0  99   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  65   579 >
  0   0   0 100   0   0:  0   1   0  99   0   0|   0   228k:   0     0 :   0     0 :   0     0 |   0     0 | 115  1230 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  66   579 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  65   574 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  65   583 >
  1   0   0  99   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  64   581 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0    16k:   0     0 :   0     0 :   0     0 |   0     0 |  67   595 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  64   583 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  65   584 >
  0   0   0 100   0   0:  0   0   0 100   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 |  65   584 >
 10  17   8  66   0   0:  0   0   0 100   0   0|   0  4096B:   0     0 :   0     0 :   0     0 |   0     0 |  67   595 >
  1   3  17  76   1   2:  1   3  19  72   1   4|   0  3336k:3488k    0 :   0     0 :   0     0 |   0     0 |3386  4124 >
  2   3  86   9   0   0:  1   4  72   7   1  15|   0     0 :  11M    0 :   0     0 :   0     0 |   0     0 |8925  5683 >
  0   3  94   3   0   0:  1   3  80   4   2  10|   0     0 :6624k    0 :   0     0 :   0     0 |   0     0 |5744  4896 >
  1   4  92   3   0   0:  0   7  81   6   1   5|8192B  412k: 448k    0 :   0     0 :   0     0 |   0     0 |2927  4535 >
  1   1  97   1   0   0:  1   3  96   0   0   0|8192B   72k:  32k    0 :   0     0 :   0     0 |   0     0 | 131  3931 >
  1   2  97   0   0   0:  0   2  98   0   0   0|   0    24k:   0     0 :   0     0 :   0     0 |   0     0 | 112  3889 >
  1  16  83   0   0   0:  2  21  74   2   0   1|  12k   32k:  32k    0 :   0     0 :   0     0 |   0     0 | 130  4828 >
  1   2  97   0   0   0:  0   2  98   0   0   0|   0     0 :  48k    0 :   0     0 :   0     0 |   0     0 | 127  3838 >
  0   1  99   0   0   0:  1   2  97   0   0   0|4096B   44k:   0     0 :   0     0 :   0     0 |   0     0 | 113  3925 >
  0   3  95   2   0   0:  0   1  99   0   0   0|8192B   44k:  16k    0 :   0     0 :   0     0 |   0     0 | 136  3973 >
  1   1  96   1   0   1:  0   1  99   0   0   0|4096B   40k:  32k    0 :   0     0 :   0     0 |   0     0 | 124  3926 >
  0   2  98   0   0   0:  1   1  98   0   0   0|   0     0 :   0     0 :   0     0 :   0     0 |   0     0 | 107  3792 >

附加信息:iotop 通常显示以下内容:

Total DISK READ: 3.82 K/s | Total DISK WRITE: 26.72 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
13516 be/2 root        3.82 K/s   11.45 K/s  0.00 %  1.44 % vmware-vmx -C /personal/VMWare
13514 be/2 root        0.00 B/s    7.63 K/s  0.00 %  0.01 % vmware-vmx -C /personal/VMWare
13517 be/2 root        0.00 B/s    7.63 K/s  0.00 %  0.01 % vmware-vmx -C /personal/VMWare
13519 be/4 root        0.00 B/s   26.72 K/s  0.00 %  0.00 % vmware-vmx -C /personal/VMWare
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init [5]
    2 be/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    6 rt/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
    7 be/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
    8 rt/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
    9 be/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]

当被阻止时它会显示以下内容:

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 3013 be/4 nobody      0.00 B/s    0.00 B/s  0.00 % 99.99 % httpd.vmware -DSSL -DSSL_ONLY 
 9828 be/4 root        0.00 B/s    0.00 B/s  0.00 % 99.99 % vmware-vmx -C /personal/VMWare/
16464 be/4 niels       0.00 B/s    0.00 B/s  0.00 % 99.99 % java -Xmx768M -Djava.encoding=UT~e/niels/pms-linux-1.10.5/pms.jar
14013 be/4 niels       0.00 B/s    0.00 B/s  0.00 % 99.99 % java -Xmx768M -Djava.encoding=UT~e/niels/pms-linux-1.10.5/pms.jar
13516 be/2 root        0.00 B/s    0.00 B/s  0.00 % 99.99 % vmware-vmx -C /personal/VMWare/
13555 be/2 root        0.00 B/s    0.00 B/s  0.00 % 99.99 % vmware-vmx -C /personal/VMWare/
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init [5]
    2 be/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    6 rt/3 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]

因此没有实际的 IO 需要等待,一切仍在等待它们的 IO。

答案1

你有没有尝试过iotop? 它列出了尝试执行 io 的进程。

还可以尝试 smartctl -a /dev/sd* 查看是否存在任何 SMART 错误。

答案2

可能是这个内核错误是原因。我在运行 8-9 个 vmware server 2.0.1 vms 的 20G RAM/2 主轴托管节点上遇到了同样的问题。您可能必须升级到 2.6.32 或降级到 2.6.18 。
我的丑陋补丁(特定于 vmware server)是将内存映射 (.vmem) 文件移至 tmpfs 挂载目录。

相关内容