做一个top
检查 io 等待,我得到这些数字:
Cpu(s): 6.7%us, 1.4%sy, 1.2%ni, 85.5%id, 5.0%wa, 0.0%hi, 0.3%si, 0.0%st
查看这些数字 (%us ~= %wa),它们是否意味着:
- 等待的 CPU 进程几乎与正在工作的 CPU 进程一样多?(=> 不好)
- 工作进程正在等待其执行计划的 5.0%?(=> 在这种情况下可以)
- 别的东西
做一个top
检查 io 等待,我得到这些数字:
Cpu(s): 6.7%us, 1.4%sy, 1.2%ni, 85.5%id, 5.0%wa, 0.0%hi, 0.3%si, 0.0%st
查看这些数字 (%us ~= %wa),它们是否意味着:
评估这些数字时需要小心。
在这种情况下,IOWait 是对给定时间段内 CPU(或所有 CPUS)由于所有可运行任务都在等待 IO 操作完成而空闲的时间的度量。
在您的示例中,如果您有 20 个 CPU,其中一个任务真正敲击磁盘,则该任务(实际上)将 100% 的时间花在 IOWait 上,随后运行此任务的 CPU 几乎 100% 的时间花在等等。但是,如果 19 个其他 CPU 有效空闲并且没有使用该磁盘,它们会报告 0% IOWait。这导致平均 IOWait 百分比为 5%,而事实上,如果您要查看磁盘利用率,这可能会报告 100%。如果在磁盘上等待的应用程序对您很重要——这 5% 有点误导,因为瓶颈中的任务可能会遇到比 5% 慢得多的性能问题。
可能,请记住大多数情况下 CPU 运行任务,而任务是请求 IO。如果两个独立的任务忙于查询两个独立 CPU 上的同一个磁盘,这将使两个 CPU 处于 100% IOWait(在 20 CPU 示例中,总体平均 IOWait 为 10%)。
基本上,如果您有很多任务需要 IO,尤其是来自同一个磁盘,再加上该磁盘 100% 被利用(请参阅 参考资料
iostat -mtx
),那么这很糟糕。不,工作进程几乎可以肯定是全职等待 IO。这只是平均报告情况(“其他 CPU 不忙”)捏造了 CPU 有许多任务要运行的百分比或事实,其中许多任务不需要执行 IO。
作为一般规则,在多 CPU 系统上,IOWait 百分比等于您拥有的 CPU 数量除以 100 可能需要调查。
看上面。但请注意,执行大量写入的应用程序会受到限制(停止使用回写,开始直接写入磁盘)。这会导致这些任务产生高 IOWait,而同一 CPU 上的其他任务写入同一磁盘则不会。所以例外确实存在。
另请注意,如果您有 1 个 CPU 专用于运行 2 个任务,一个是重 IO 读/写器,另一个是重 CPU 用户,那么在这种情况下 CPU 将报告 50% IOWait,如果您有 10 个这样的任务将是 10% IOWait(和一个可怕的负载),因此报告的数字可能比实际可能存在的问题要低得多。
我认为您确实需要查看
iostat -mtx
一些磁盘利用率指标,并pidstat -d
获得一些每个进程的指标,然后考虑以这种方式访问这些磁盘的应用程序是否可能导致问题,或其他潜在的应用程序撞击那些磁盘可能会导致问题。CPU 指标确实可以作为潜在问题的指标,它们很笼统,因此了解它们可能过于笼统的地方是一件好事。
这意味着 5% 的 CPU 时间用于等待磁盘 IO 完成,而 6.7% 的 CPU 时间用于实际执行用户态进程所需的处理。
检查 vmstat 输出;例如
vmstat 1 30
,只要列中的进程计数b
不堆积,你就很好。列b
表示处于不可中断状态(D 状态)的进程数,这些进程在磁盘 IO 操作完成之前被阻塞。所以回答你的问题
没有时间大致相同,但这不一定是问题。只要您没有在进程开始以 D 状态堆积的问题,就可以了。改进可能包括添加更多 RAM 以为页面缓存(磁盘缓存)提供更多空间以减少磁盘读取次数,而不是从内存缓存中读取,调整磁盘调度程序。
这是处理用户态进程所花费的 CPU 时间的一部分;这里没有什么可担心的,尤其是有这么多空闲的
85.5%id
CPU 时间等待状态是指原本可运行的进程停止等待 IO。这是争用的标志,通常是为了磁盘资源。
这确实意味着您的某些进程没有尽可能快地运行,但这很正常。