正如之前文章讲过:在 Unix / Linux 体系中,常常使用“用户” CPU 时间(us)、“系统” CPU 时间(sy)、“良好”的 CPU 时间(ni)、“空闲” CPU 时间(id)、“等待”CPU 时间(wa)、“硬件中断” CPU 时间(hi)、“软件中断” CPU 时间(si)以及“被盗” CPU 时间(st)等 8 个不同的指标来评判操作系统的 CPU 资源使用情况。
在之前的文章中,我们解析过 User 跟 Wait CPU Time ,具体可参考链接:Linux系统之User CPU time解析 以及 Linux系统之Wait CPU time解析,在实际的业务场景中,在大家的脑海中可能较为熟悉的是 %idle (空闲 百分比) 和 %wait (I/O 等待 百分比)。 如果 %id 很低,那么说明 CPU 的工作负载很大并且没有多少计算负载能力剩余。 如果 %wa 很高,则说明 CPU 处于等待计算的状态,但是正在等待I/O活动的完成(类似 从数据库中获取存储在 磁盘上 的一行数据)。然而,从某种特定的意义上来讲,%st(percent steal time) 是CPU展示的最后一个性能指标。在本文中,笔者将重点解析另一种 CPU 指标:Steal CPU time 。
何为 “Steal” CPU时间?
“Steal 时间”(也称为“偷窃”时间)仅在云环境(如AWS)或 VMWare 环境中相关,在云环境中,多个虚拟机将在一个基础物理主机上运行。在这种情况下,CPU 资源将在多个虚拟机之间共享。虚拟机管理程序是一项将在虚拟机之间分配基础物理主机的 CPU 资源和其他资源的技术。
“Steal 时间”(或“被盗时间”)是仅与虚拟化环境相关。它表示真正的 CPU 对当前虚拟机不可用的时间-虚拟机管理程序从该VM“偷走”了该 CPU(用于运行另一个VM,或用于其自身需求)。如果特定虚拟机上的“Steal 时间”很高,则表明该虚拟机在过载或者负荷较大的物理主机上运行。
查找“Steal” CPU 时间?
基于实际的业务场景以及相关经验,可以从以下来源找到窃取 CPU 时间:
1、使用基于网络的根本原因分析工具(如 yCrash)来报告“被盗”的 CPU 时间。如果“被盗”的 CPU 时间超出阈值,该工具便能够生成警报。
2、Unix / Linux 命令行工具“ top ”的 “ steal ”字段中也报告了“被盗”的 CPU 时间,具体如下图所示:
解决“Steal” CPU 时间过长的问题?
通常,我们可以基于以下场景进行,具体如下所示:
1、如果我们基于云平台环境,可以尝试升级到大容量计算实例。(举个简单示例:如果我们在具有“ m4.large”实例的 AWS /阿里云平台中运行,则可以升级到“ m4.xlarge”实例)。
2、如果有可能的话,建议在实际的业务场景中考虑在物理主机上运行较少数量的虚拟机实例,以使得系统能够正常运转。
3、基于实际的需求,可尝试考虑在遭受高 “Steal” 时间的特定虚拟机中运行较少数量的进程。
4、可以尝试使用 Sar 之类的相关辅助工具定位并结合其他措施优化应用程序性能,以使应用程序消耗更少的 CPU。
5、从资源配置角度入手,也许针对每个虚拟机的 CPU 份额配置的不够合理,使得其分配得过低,从而影响性能。此种场景下,建议尝试增加份额并对其进行验证,以满足实际的业务需求。
由于所述内容较为简单,在实际的业务场景中几乎很少会遇到此类情况,但基于技术角度,针对每一个细节的全方位监测、掌握,对于我们而言,更有助于分析其他类似的资源异常问题,从而提升劳动力。基于 “Steal” CPU Time 解析,本文到此为止,大家有任何问题,可以随时留言、沟通。