我陷入了 IOwait 相关问题,我正在监视的服务器在加载运行时显示了非常高的 IOwait 值(50%-70%)。我使用 SAR 报告命令生成了此数据。理想值应低于8%-9%因为服务器有12芯(1/12 ~ 0.08)。我在某处读过这篇文章并相应地采取了假设。
可以采取什么措施来纠正这个高 IOwait 问题,它与服务器中可以检查以提高性能的其他因素有何关系。
答案1
请允许我透露一下 Linux 的小秘密:Linux 中没有可靠的 iowait 统计数据。这只是事实。从过程(5)我们读:
iowait(自 Linux 2.5.41 起)
(5) 等待I/O完成的时间。该值并不可靠,原因如下:
CPU不会等待I/O完成; iowait 是任务等待 I/O 完成的时间。当CPU因未完成的任务I/O而进入空闲状态时,将在该CPU上调度另一个任务。
在多核CPU上,等待I/O完成的任务不在任何CPU上运行,因此每个CPU的iowait很难计算。
在某些情况下,该字段的值可能会减少。
因此,我的建议是忘记 Linux 中的 iowait 测量。
答案2
CPU 越强大,iowait 就越大,而不是相反。
一般来说,为了减少 iowait 这可以帮助:
如果可能/适用,优化应用程序代码,例如次优的数据库查询可能会迫使 DBMS 执行低效的计划并导致磁盘负载过多。
如果读取负载很重,请获取更多 RAM。
使存储子系统更快。更快的磁盘、更快的 RAID、更快的存储控制器、回写式缓存。这本身就是一门科学。
抱歉,对于这样的通用问题,只有一个通用答案。