在具有 8 个 EBS 卷和大量磁盘流量的 8 路 Amazon EC2 实例(运行 Linux 2.6.21)上,我们看到 top 中的 %wa 很高(30-40%),平均负载也很高(8-9)。我的理解是,等待来自 EBS 卷的 I/O 的进程被计入平均负载中(ps 显示几个处于 D 状态的进程,大约与平均负载一样多)。
但是,不清楚 %wa 是什么意思。CPU 是否真的在等待 EBS 卷的响应,还是内核在其上安排了另一个进程?我预计会安排另一个进程;但我不明白为什么 iowait 时间会表示为总 CPU 时间的百分比(除非百分比加起来超过 100%)。
只要我们不最大化 EBS 卷的 I/O 容量,我就不担心,但如果 CPU 因等待 I/O 而被占用,我认为我们的机器将在耗尽 I/O 容量之前耗尽 CPU 容量。
答案1
只要至少有一个进程准备好接收 CPU 时间,CPU 就可以用于其他进程。问题就在这里——你可以有一个 I/O 密集型系统,每个进程都在等待 I/O 完成,而且由于没有任何东西在等待 CPU 时间,所以没有理由将 CPU 安排(和利用)用于内核活动以外的任何事情……因此有术语 I/O等待。
尝试运行vmstat 1
并定期查看“b”列(第二列)中是否有大于 0 的数字。如果是,则可能是 I/O 受限。偶尔看到它没什么大不了的,一直看到 2-3 范围内的数字是可以容忍的,但不是理想的,看到超过 5+ 则意味着您可能太忙了(尽管这取决于您的系统可以容纳多少 I/O,因此可能会多或少,视情况而定)。“b”表示“进程被阻止”,如“计划运行但被阻止,等待 I/O 完成的进程数”。
跟进:
2.6 系列内核中,重度 I/O 和较新的调度程序存在已知错误。尝试更改您的调度程序,看看是否有影响。
答案2
man vmstat 指出:“wa:等待 IO 所花费的时间。在 Linux 2.5.41 之前,包含在空闲中。”