监控 CPU 使用情况

Last published : Oct 07, 2026
主机上每个 pCPU 的最佳 vCPU 数量取决于您的用例。在操作过程中,请确保监控 XenServer® 环境的性能并相应调整配置。

术语

在此领域,有各种术语有时可以互换使用。在本文中,我们使用以下术语和含义:
  • CPU(物理 CPU): 连接到处理器插槽的物理硬件。
  • 核心: 一个物理处理单元,能够执行一个独立的执行线程,其中包含支持该执行所需的所有功能单元。
  • 超线程: 一个物理处理单元,能够执行一个独立的执行线程,它与另一个超线程(也称为其“同级线程”)共享一些功能单元。
  • 逻辑 CPU (pCPU): 一个能够执行独立线程的单元,包含一组寄存器和一个指令指针。在启用了超线程的系统中,这是一个超线程。在其他情况下,它是一个核心。
  • 主机 pCPU: 主机中逻辑 CPU 的总数。
  • vCPU(虚拟 CPU): 一个虚拟化的逻辑 CPU。这是一个能够执行独立线程的逻辑单元,提供给虚拟机。在 XenServer 中,vCPU 可以“分时”pCPU,使用调度程序来确定在任何给定时间哪个 vCPU 在哪个 pCPU 上运行。
  • 客户机 vCPU: 呈现给虚拟机内部客户机操作系统的 vCPU。
  • Dom0 vCPU: 对 XenServer 控制域 (dom0) 可见的 vCPU。
  • 主机总 vCPU: 主机中 dom0 vCPU 和所有客户机 vCPU 的总和。

一般行为

主机上的 vCPU 总数是 dom0 使用的 vCPU 数量加上分配给主机上所有虚拟机的 vCPU 总数。随着主机上 vCPU 数量的增加,您可能会遇到以下类型的行为:
  • 当主机上的 vCPU 总数小于或等于主机上的 pCPU 数量时,主机总是提供 VM 所请求的全部 CPU。
  • 当主机上的 vCPU 总数大于主机上的 pCPU 数量时,主机将主机 pCPU 的时间共享给 VM。这种行为通常不会影响 VM,因为它们的 vCPU 通常在某些时候处于空闲状态,并且在大多数情况下,主机不会达到 100% 的 pCPU 使用率。
  • 当主机上的 vCPU 总数大于主机上的 pCPU 数量,并且主机有时达到 100% 的主机 pCPU 使用率时,VM 的 vCPU 在峰值期间无法获得它们所请求的那么多 pCPU。相反,在这些峰值期间,VM 会减速以获得主机上可用 pCPU 的一部分。
  • 当主机上的 vCPU 总数大于主机上的 pCPU 数量,并且主机经常达到 100% 的主机 pCPU 使用率时,VM 的 vCPU 会持续减速以获得主机上可用 CPU 的一部分。如果 VM 具有实时要求,则这种情况并不理想,您可以通过减少主机上的 vCPU 数量来解决。
主机上的最佳 vCPU 数量可能取决于 VM 用户对其 VM 速度的感知,尤其是在 VM 具有实时要求时。

获取有关 CPU 的信息

要查找主机上的 pCPU 总数,请运行以下命令:
xe host-cpu-info --minimal
要查找主机上当前 vCPU(guest 和 dom0)的总数,请运行以下命令:
xl vcpu-list | grep -v VCPU | wc -l

使用 RRD 指标监控 CPU 使用率

XenServer 提供 RRD 指标,用于描述您的 VM 上的 vCPU 的性能。

当主机 pCPU 使用率为 100% 时

当主机达到 100% 的主机 pCPU 使用率时,请使用以下 VM 指标来决定是否将 VM 迁移到另一台主机:

runstate_concurrency_hazard

  • runstate_concurrency_hazard > 0% 表明有时至少一个 vCPU 正在运行,而至少另一个 vCPU 想要运行但无法获得 pCPU 时间。如果 vCPU 必须协调,则此行为会导致性能问题。
  • runstate_concurrency_hazard 接近 100% 是应避免的情况。
    建议的操作:
    如果存在性能问题,请执行以下操作之一:
    • 减少虚拟机中的 vCPU 数量。
    • 将虚拟机移动到另一台主机。
    • 通过迁移其他虚拟机或减少其 vCPU 数量来减少主机上的 vCPU 总数。

runstate_partial_contention

  • runstate_partial_contention > 0% 表示至少有一个 vCPU 想要运行但无法获得 pCPU 时间,并且至少有一个其他 vCPU 被阻塞(要么是因为无事可做,要么是因为它正在等待 I/O 完成)。
  • runstate_concurrency_hazard 接近 100% 是一种应避免的情况。
    建议的操作:
    通过查看存储供应商提供的后端指标,检查后端 I/O 存储服务器是否过载。如果存储服务器未过载且存在性能问题,请执行以下操作之一:
    • 减少虚拟机中的 vCPU 数量。
    • 将虚拟机移动到另一台主机。
    • 通过迁移其他虚拟机或减少其 vCPU 数量来减少主机上的 vCPU 总数。

runstate_full_contention

  • runstate_full_contention > 0% 表示有时 vCPU 想要同时运行,但都无法获得 pCPU 时间。
  • runstate_full_contention 接近 100% 是应避免的情况。
    建议操作:
    如果存在性能问题,请采取以下措施之一:
    • 减少虚拟机中的 vCPU 数量。
    • 将虚拟机迁移到另一个主机。
    • 通过迁移其他虚拟机或减少其 vCPU 数量来减少主机上的 vCPU 总数。

当主机 pCPU 使用率低于 100% 时

如果主机未达到 100% 的主机 pCPU 使用率,请使用以下虚拟机指标来确定虚拟机是否具有正确的 vCPU 数量:

runstate_fullrun

  • runstate_fullrun = 0% 表示 vCPU 从未同时全部使用。
    建议操作:
    减少此虚拟机中的 vCPU 数量。
  • 0% < runstate_fullrun < 100% 表示 vCPU 有时会同时全部使用。
  • runstate_fullrun = 100% 表示 vCPU 始终同时全部使用。
    建议操作:
    您可以增加此虚拟机中的 vCPU 数量,直到 runstate_fullrun < 100%。请勿进一步增加 vCPU 数量,否则如果主机达到 100% 的 pCPU 使用率,可能会增加并发危害的概率。

runstate_partial_run

  • runstate_partial_run = 0% 表示所有 vCPU 始终处于使用状态 (full-run=100%),或者没有 vCPU 处于使用状态 (idle=100%)。
  • 0% < runstate_partial_run < 100% 表示有时至少有一个 vCPU 被阻塞,原因可能是它们无事可做,或者它们正在等待 I/O 完成。
  • runstate_partial_run=100% 表示始终至少有一个 vCPU 被阻塞。
    建议操作:
    检查后端 I/O 存储服务器是否过载。如果未过载,则虚拟机可能具有过多的 vCPU,您可以减少此虚拟机中的 vCPU 数量。虚拟机中 vCPU 过多可能会增加主机 CPU 使用率达到 100% 时虚拟机进入并发危害状态的风险。