3

我如何获得系统 ioWait?通过使用 /proc 接口的信息(我猜它写在那里的某处),这将是更可取的,因此应用程序可以检测到这一点,但是从我的应用程序对 exec() 的外部调用是可以接受的。

4

2 回答 2

9

这在/proc/stat.

从内核源代码中的文档:

第一个“cpu”行聚合了所有其他“cpuN”行中的数字。这些数字标识了 CPU 用于执行不同类型工作的时间量。时间单位为 USER_HZ(通常为百分之一秒)。各列的含义如下,从左到右:

  • user:在用户模式下执行的正常进程
  • nice:在用户模式下执行的 niced 进程
  • system:在内核模式下执行的进程
  • 闲置:摆弄大拇指
  • iowait:等待 I/O 完成
  • irq:服务中断
  • 软中断:服务软中断
  • 偷:不自觉的等待
于 2009-08-27T08:17:03.443 回答
1

另一种获取方法iowait是使用iostat,例如:

iostat -c 5

将返回(每 5 秒):

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.39    0.00   11.42    4.74    0.00   75.46

或 JSON 格式:

iostat -o JSON -c 5
{
   "sysstat":{
      "hosts":[
         {
            "nodename":"host.example.com",
            "sysname":"Linux",
            "release":"4.15.0-159-generic",
            "machine":"x86_64",
            "number-of-cpus":64,
            "date":"2021/10/27",
            "statistics":[
               {
                  "avg-cpu":{
                     "user":7.32,
                     "nice":0.07,
                     "system":5.60,
                     "iowait":13.59,
                     "steal":0.00,
                     "idle":73.43
                  }
               }
            ]
         }
      ]
   }
}

在这里,,等iowait报告的百分比相同。topglances

笔记:

如果您运行一次,每次都会得到相同的值,因此“修复”它的一种方法是至少运行 2 次并使用最后的值:

iostat -c 1 2

这意味着:运行 2 次,间隔 1 秒

bash您只能获得以下iowait值:

iostat -c 1 2 | awk 'NF { print $4 }' | tail -n 1

在 的情况下JSON,它将返回两个下的孩子statistics(使用最后一个)。

于 2021-10-27T05:22:32.320 回答