平均负载使用正在运行、可运行或处于不间断睡眠状态的进程。那么,处于不间断睡眠状态的进程是否与 top 命令中的 %wa 相对应?两者都指等待 IO 的线程,因此可以直观地假设,如果一个线程增加,另一个线程也会增加。
然而,我看到的恰恰相反。%wait 没有增加,%idle 很高,平均负载也很高。我读过其他关于这个问题的问题,但我没有找到满意的答案,因为它们没有解释这种行为。
- 如果 %wait 不包括不间断睡眠状态,那么它到底是什么?是不是 %wait 实际上与负载不对应?(例如,在 2 CPU 机器上负载可能是 10,但它只占 30% 的等待时间)
- 这个 IO 与未中断状态下提到的 IO 有何不同? 在这种情况下,可能的补救措施是什么?
显然,增加 CPU 没有帮助,因为队列中有一些 CPU 没有接收的任务。
另一种情况是平均负载和 CPU 利用率不相加,这似乎不直观:
这种情况有点不同。CPU 空闲时间很长,平均负载很高(通常是 CPU 数量的两倍),没有磁盘 I/O,因此交换使用率很高,有一些网络 I/O。没有处于不间断睡眠状态的进程,运行队列频繁上升。但是 CPU 怎么还闲着呢?我不应该期望 CPU 利用率为 100% 吗?是不是因为大量任务正在等待网络(或其他什么?)而无法放在 CPU 上?似乎唯一合理的假设是这些任务各自消耗的 CPU 时间很少。是这样吗?在这种情况下,瓶颈是什么?说增加 CPU 无济于事,对吗?如何找出要配置什么或增加哪些资源才能降低平均负载?
sar -n TCP,ETCP,DEV 1
特区
netstat
连接数
网络状态
iostat
iostat
vmstat
状态监测
uptime
正常运行时间
top
顶部
nicstat
尼克斯塔特
答案1
(假设是 Linux,尽管一般概念可以应用于其他操作系统。)
工作负载不能仅通过平均负载和 %iowait 来描述。这些指标仅汇总处于特定状态的任务。分别是可运行和不可中断的计数、空闲时间和 I/O 未完成。
您可能会遇到这样的情况:有些任务处于可运行状态,有些 CPU 周期处于空闲状态,但 I/O 却处于非空闲状态。想象一下一个相当繁忙的 Web 服务器,200 个工作进程在 2 个 CPU 上运行。平均负载约为 1,iowait 接近 0。任务很多,但每个任务的工作量不大,CPU 空闲但等待磁盘的时间更少。
如果这个假设的 Web 服务器虚拟机被实时迁移,其内存延迟和可用 CPU 时间可能会短暂受到影响。症状可能是平均负载更高,但这不会导致 iowait。
采取综合方法来查看系统的所有组件;这远远超出了顶层。例如,考虑利用率、饱和度和错误一切。当性能工具可以计算和分析几乎任何事物时,为什么只满足于不能说明全部情况的相同老方法呢?