如果 vmstat 中 R (runqueue) 大于 B (waitqueue),是否是 I/O 限制?

如果 vmstat 中 R (runqueue) 大于 B (waitqueue),是否是 I/O 限制?

如果 runqueue 是等待开启 CPU 的进程数 + 当前正在运行的进程数,而 waitqueue 是等待 I/O 的进程数,那么 vmstat 输出中的 B 大于 R 是否意味着存在I/O 限制,而不是 CPU 限制?我很困惑,因为下面的链接说的是相反的......来自http://nonfunctiontestingtools.blogspot.com/2013/03/vmstat-o​​utput-explained.html?m=1

“如果可运行线程 (r) 除以 CPU 数量大于 1 -> 可能的 CPU 瓶颈(如果我们有足够的 CPU 或我们有,则 (r) 应该与 CPU 数量(正常运行时间中的逻辑 CPU)进行比较)更多线程。)阻塞进程列 (b) 中的数字较大表示磁盘速度较慢。 (r) 应始终高于 (b);如果不是,通常意味着您有 CPU 瓶颈”

答案1

in 的数字高于binr意味着 CPU 经常处于空闲状态,因此您会感到困惑。该文档应该是“意味着您有 I/O 瓶颈”。

请注意,该页面表示r永远不应高于 CPU 数量,并且在 12 个 CPU 系统上 r=16 是一个“严重”问题。这是相当夸张的。这仅仅意味着 CPU 已被充分利用,并且一些线程正在等待。通常没什么大不了的。

最后,不要混淆线程和进程,就像链接文档有时也会这样做一样。r和列b显示线程数,而不是进程数。并非所有进程都是单线程的。

答案2

我认为这句话完全是混乱的。

当 时r > num_cpus,将整个系统视为受 CPU 限制(在该时刻)是有意义的。

不过我觉得并没有r > b什么特别的意义。

另一个消息来源建议“如果 [the] 列中不断出现非零数字b,您可以使用 进一步调查iostat。”将这种情况视为建议 IO 绑定系统可能更有意义,除非您知道正在使用多个 IO 队列。

iostat包括%util每个磁盘设备的一列。即,如果%util为 100,则表明该设备上始终至少有一个进程正在等待。 avgqu-sz将显示有多少个不同的请求正在等待。

使用 AIO 的程序可以一次提交多个请求。这主要由数据库使用,例如 MySQL InnoDB。大多数程序不使用Linux AIO,因为它不支持缓存。

相关内容