我正在寻找从 Solaris VM 获取 CPU I/O 等待时间指标的命令。
我发现vmstat -s
给出了以下输出。
2627 user cpu
62008 system cpu
285180 idle cpu
**0 wait cpu**
我查看了 的手册页vmstat
,但我看不到任何有关等待时间的文字。
我可以将上面输出中的最后一行假设为 I/O 等待时间吗?
答案1
不,最后一行不报告 I/O 等待时间,而是硬编码为在 Solaris 上显示零,无论实际负载如何。
随着多核和多线程CPU的普及,I/O wait
时间不再具有真正的意义,甚至有可能产生误导。 I/O 通常不绑定到单个 CPU 单元,因此当其中一个或多个待处理时,没有特定的 CPU 等待 I/O。在任何情况下,只有进程在等待 I/O 完成,这种等待不使用任何 CPU 周期,因此从技术上讲,CPU 在此期间处于空闲状态并可用于其他任务。从 Solaris 10 开始,与空闲时间不可区分的 I/O 被报告为零,然后以前的值I/O wait
现在包含在 CPU 空闲时间中,事实确实如此。
如果您担心 I/O,请查看磁盘统计信息iostat
(例如iostat -xntc 5
,查看服务时间svc_t
、等待队列中的 I/O 数量wait
以及队列不为空的时间百分比%w
),而不是报告的 CPU 统计信息通过vmstat
、sar
、top
、iostat
等。
本文还可能对调查 I/O 性能问题感兴趣:http://dtrace.org/blogs/brendan/2011/05/11/file-system-latency-part-1/
这个正在解释这个问题与 Linux 相同。
答案2
vmstat 更可能用于测量虚拟内存使用情况,因此更好的建议是使用iostat
或sar
iostat:
iostat 1 3
tty sd2 ssd35 ssd38 ssd39 cpu
tin tout kps tps serv kps tps serv kps tps serv kps tps serv us sy wt id
0 0 0 0 0 162 7 18 1513 24 6 0 0 0 41 27 0 32
0 236 0 0 0 0 0 0 0 0 0 0 0 0 51 27 0 21
您应该注意 cpu 字段:us - 有多少应用程序正在使用,sy - 操作系统,wt - 等待时间,id - CPU 的中间时间
萨尔:
sar -u 1 2
SunOS frctfscc16p 5.10 Generic_150400-35 sun4u 08/17/2016
09:29:02 %usr %sys %wio %idle
09:29:03 39 22 0 39
09:29:04 32 21 0 47
Average 36 21 0 43
在这种情况下,您可以看到与 iostat 基本相同,由您选择,还有其他工具,但我更喜欢 sar,因为它可以及时为您提供良好的指标。