![测量 VMware 和 Hyper-V 虚拟机管理程序上的 CPU %steal](https://linux22.com/image/50845/%E6%B5%8B%E9%87%8F%20VMware%20%E5%92%8C%20Hyper-V%20%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%AE%A1%E7%90%86%E7%A8%8B%E5%BA%8F%E4%B8%8A%E7%9A%84%20CPU%20%25steal.png)
对于 Xen Linux 客户机,%steal
可以通过 top 和其他实用程序轻松获得时间。
当运行 ESXi 或 Hyper-V 等非 Xen 虚拟机管理程序时,是否可以从 Linux 来宾中获取此指标及相关指标?
对于 Windows 客户机,VMware 和 Microsoft 都提供了 perfmon 计数器。例子:
top
但这些似乎并没有通过Centos 6.4 中的原生版本公开。
答案1
在 VMware 来宾中获取这些(以及更多)性能计数器的唯一方法是使用 vmware-tools 附带的 VMGuestLib SDK。
我为这个库编写了一个 python 包装器,称为 python-vmguestlib 和一个工具 vmguest-stats 来访问这些计数器。现在有三个 Dstat 插件将这些性能计数器与其他系统资源关联起来。它很简单:
dstat -c –vm-cpu -m –vm-mem –vm-mem-adv
您可以在以下位置找到 python 包装器、vmguest-stats 工具和 Dstat:
欢迎反馈和改进!
答案2
工作中的 vSphere 集群超载,但常用的 Zabbix 测量工具并未指示 CPU 窃取时间。非常感谢 Dag,我拿了他的测试程序并编写了一个脚本来打印窃取百分比,如下所示
#!/usr/bin/python
import sys, os, time
sys.path.append(os.path.join('/root/dagwieers/vmguestlib/'))
from vmguestlib import VMGuestLib
gl = VMGuestLib()
gl.UpdateInfo()
stolen_ms_1 = gl.GetCpuStolenMs()
time.sleep(1)
gl.UpdateInfo()
stolen_ms_2 = gl.GetCpuStolenMs()
# print percentage of stolen time
print '%d' % ((stolen_ms_2 - stolen_ms_1) / 10)
gl.CloseHandle()
它证实了我的想法,我经常损失 75% 的 CPU 时间!
答案3
据我了解,您正在计算被盗的总毫秒数。
此时您对偷窃的影响知之甚少。
如果将被盗的毫秒数除以虚拟机的数量,您将得到每个虚拟机被盗的毫秒数。
然后,将被盗毫秒除以被盗值应用的实际毫秒(计算被盗毫秒的间隔),您将得到虚拟机被盗的时间百分比(平均)。
因此,计算结果为每个虚拟机的被盗百分比=被盗ms / #VMsOn / 间隔ms