【发布时间】:2009-08-27 08:13:45
【问题描述】:
如何获得系统 ioWait? 通过使用 /proc 接口的信息(我猜它写在那里的某处)会更好,因此应用程序可以检测到这一点,但是从我的应用程序对 exec() 的外部调用是可以接受的。
【问题讨论】:
如何获得系统 ioWait? 通过使用 /proc 接口的信息(我猜它写在那里的某处)会更好,因此应用程序可以检测到这一点,但是从我的应用程序对 exec() 的外部调用是可以接受的。
【问题讨论】:
这在/proc/stat 中可用。
来自内核源代码中的文档:
第一个“cpu”行聚合 所有其他的数字 “cpuN”行。这些数字标识 CPU 花费的时间 执行不同类型的工作。 时间单位为 USER_HZ(通常 百分之一秒)。含义 的列如下,从 从左到右:
- user:在用户模式下执行的正常进程
- nice:在用户模式下执行的 niced 进程
- 系统:在内核模式下执行的进程
- 空闲:旋转拇指
- iowait:等待 I/O 完成
- irq:服务中断
- softirq:服务软中断
- 偷:不由自主地等待
【讨论】:
获取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 与top、glances 等报告的百分比相同。
如果运行一次,每次都会得到相同的值,因此“修复”它的一种方法是至少运行 2 次并使用最后的值:
iostat -c 1 2
这意味着:运行 2 次,间隔 1 秒
在bash 中,您只能通过以下方式获得iowait 值:
iostat -c 1 2 | awk 'NF { print $4 }' | tail -n 1
在JSON的情况下,会返回statistics下的两个孩子(使用最后一个)。
【讨论】: