top 里 us 只有 20%,st 却有 30% 到 40%,业务线程明明可运行却在排队,云监控显示宿主机 CPU 也快打满了,怎么优化应用都没用。日志里能对上时间点,这种反而好排。

steal 是虚拟 CPU 等待物理 CPU 的时间,宿主超卖或者同租户抢得凶时,guest 内部做任何优化都没用,只能调整规格或者迁移宿主机,这一点要先确认。这一点先确认清楚,后面就不用反复试。

vmstat 1 5
top -bn1 | head -5
cat /proc/stat | grep '^cpu '
mpstat 1 3

围绕「steal time 偏高」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。

处理上按这个顺序:用 vmstat 看 st 列是否长期高于百分之五 偶发一次不算问题;对比同宿主机其他实例的 st 判断是否局部超卖 找运维问清楚;调整实例规格或者申请迁移到负载更低的宿主机 这是唯一有效的办法。

结果对不对很好判断,st 稳定在百分之五以下 业务线程可运行时间不再被拉长 接口耗时同步下降。

作者 9823189