排查计算实例性能问题


本文档介绍了如何诊断和缓解 Compute Engine 虚拟机 (VM) 和裸金属实例上的 CPU、内存和存储性能问题。

准备工作

  • 安装 Ops Agent,以查看完整的实例性能指标,例如内存和磁盘空间利用率

查看性能指标

如需查看计算实例的性能指标,请使用 Google Cloud 控制台中提供的 Cloud Monitoring 可观测性指标。

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 您可以查看个别实例的指标,也可以查看消耗资源量最多的五个实例的指标。

    如需查看个别虚拟机的指标,请执行以下操作:

    1. 点击要查看其性能指标的实例的名称。系统会打开实例详情页面。

    2. 点击可观测性标签页以打开“可观测性”概览页面。

    如需查看消耗资源量最多的五个实例的指标,请点击虚拟机实例页面上的可观测性标签页。

  3. 探索实例的性能指标。查看概览CPU内存网络磁盘部分以查看每个主题的详细指标。以下是指示实例性能的关键指标:

    • 概览页面上:

      • CPU 利用率。实例使用的 CPU 的百分比。

      • 内存利用率。实例使用的内存百分比(不包括磁盘缓存)。对于使用 Linux 操作系统的实例,还不包括内核内存。

      • 网络流量。在一分钟间隔内发送和接收字节的平均速率。

      • 与虚拟机/外部/Google 来源建立的新连接。一分钟内不同的 TCP/UDP 流的估算数量,按对等类型分组。

      • 磁盘吞吐量。对磁盘执行读写操作的平均字节数。

      • 磁盘 IOPS。磁盘对 I/O 读取和写入操作的平均速率。

    • Network Summary 页面上:

      • 发送到虚拟机/外部/Google。网络流量发送到 Google 服务、实例和外部目标位置的速率(基于数据包样本)。系统会扩缩指标,以使总和与发送的总网络流量相匹配。

      • 从虚拟机/外部/Google 接收。从 Google 服务、实例和外部来源接收网络流量的速率(基于数据包样本)。系统会扩缩指标,以使总和与接收的总网络流量相匹配。

      • 网络数据包总计。在一分钟间隔内发送和接收数据包的总速率。

      • 数据包平均大小。在一分钟间隔内发送和接收的数据包的平均大小(以字节为单位)。

      • 遭拒的防火墙传入数据包。发送到实例但由于防火墙规则拒绝而未被实例接收的传入网络数据包的速率。

    • 磁盘性能页面上,执行以下操作:

      • 平均 I/O 大小:磁盘的 I/O 读取和写入操作的平均大小。较小(4 到 16 KiB)的随机 I/O 通常受限于 IOPS,而顺序或较大(256 KiB 到 1 MiB)的 I/O 受限于吞吐量。

      • 队列平均长度:排名前 5 的设备已加入队列和正在运行的磁盘 I/O 操作次数(也称为队列深度)。如需达到磁盘的性能限制,请使用较高的 I/O 队列深度。与物理磁盘或本地 SSD 磁盘相比,Persistent Disk 和 Google Cloud Hyperdisk 是联网存储,延迟时间通常更长。

      • I/O 平均延迟时间:针对挂接到实例的所有磁盘操作汇总的 I/O 读取和写入操作的平均延迟时间,由 Ops Agent 测量。此值包括操作系统和文件系统处理延迟时间,具体取决于队列长度和 I/O 大小。

了解性能指标

实例性能受运行实例的硬件、实例上运行的工作负载以及实例的机器类型的影响。如果硬件无法支持实例的工作负载或网络流量,则实例的性能可能会受到影响。

CPU 和内存性能

硬件详细信息

CPU 和内存性能受以下硬件限制的影响:

  • 每个虚拟 CPU (vCPU) 是在 CPU 处理器上以单个硬件多线程的形式实现的。
  • Intel Xeon CPU 处理器支持单个处理器核心上的多个应用线程。
  • 使用 C2 机器类型的虚拟机具有虚拟核心到物理核心的固定映射,并向客机操作系统公开 NUMA 单元架构。
  • 即使只有基本频率通告给访客环境,大多数虚拟机也会获得 CPU 平台上列出的全核 Turbo 频率
  • 共享核心机器类型使用上下文切换功能在 vCPU 之间共享物理核心以实现多任务。它们还提供爆发能力,在此期间,虚拟机的 CPU 利用率可以超过 100%。如需了解详情,请参阅共享核心机器类型

如需了解实例的 CPU 和内存性能,请查看 CPU 利用率内存利用率的性能指标。此外,您还可以使用进程指标查看正在运行的进程、将资源消耗中的异常归因于特定进程,或识别实例成本最高的资源使用方。

如果 CPU 或内存利用率一直很高,则表明需要扩大虚拟机的大小。如果虚拟机的 CPU 或内存利用率持续高于 90%,请将虚拟机的机器类型更改为具有更多 vCPU 或内存的机器类型。

网络性能

硬件详细信息

网络性能受以下硬件限制的影响:

  • 每种机器类型都有特定的出站流量带宽上限。如需确定实例机器类型的出站流量带宽上限,请访问与实例机器家族对应的页面。
  • 向虚拟机添加更多网络接口或增加每网络接口 IP 地址数不会增加虚拟机的入站流量或出站流量网络带宽,但您可以配置某些机器类型来获得更高的带宽。如需了解详情,请参阅配置具有较高带宽的虚拟机

如需了解实例的网络性能,请查看性能指标,包括网络数据包总计数据包平均大小与虚拟机/外部/Google 的新连接发送到虚拟机/外部/Google从虚拟机/外部/Google 接收被拒绝的防火墙传入数据包

查看网络数据包总计数据包平均大小与虚拟机/外部/Google 来源建立的新连接是否适合您的工作负载。例如,网络服务器可能会遇到许多连接和小型数据包,而数据库可能会遇到很少的连接和大型数据包。

如果传出网络流量一直较高,则可能表示需要将虚拟机的机器类型更改为具有更高出站流量带宽限制的机器类型

如果您发现防火墙拒绝了大量传入数据包,请访问 Google Cloud 控制台中的 Network Intelligence Firewall Insights 页面,详细了解被拒绝数据包的来源。

转到“防火墙数据分析”页面

如果您认为自己的流量被防火墙错误地拒绝,请尝试运行连接测试

如果您的实例从不同可用区或区域中的实例发送和接收大量流量,请考虑修改您的工作负载,将更多数据保留在某个可用区或区域内,以增加延迟时间并降低费用。如需了解详情,请参阅 Google Cloud 内虚拟机间的数据传输价格。如果您的实例向同一可用区内的其他实例发送大量流量,请考虑使用紧凑布置政策来实现较低的网络延迟。

裸金属实例

与虚拟机实例不同,在裸金属实例中,C6 和 C1E 休眠状态不会停用。这可能会导致空闲核心进入休眠状态,并降低裸金属实例的网络性能。如果您需要全网络带宽性能,可以在操作系统中停用这些休眠状态。

  • 您可以使用以下脚本在 C3 裸机实例上停用休眠状态,而无需重启实例:

    for cpu in {0..191}; do
    echo "1" | sudo tee /sys/devices/system/cpu/cpu$cpu/cpuidle/state3/disable
    echo "1" | sudo tee /sys/devices/system/cpu/cpu$cpu/cpuidle/state2/disable
    done
    
  • 或者,您也可以更新 GRUB 配置文件,以在实例重启后保留更改。

    # add intel_idle.max_cstate=1 processor.max_cstate=1 to GRUB_CMDLINE_LINUX
    sudo vim /etc/default/grub
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    sudo reboot
    
  • 重新启动后,验证 C6 和 C1E 休眠状态是否已停用:

    ls /sys/devices/system/cpu/cpu0/cpuidle/
    state0  state1
    
    cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name
    POLL
    C1
    

输入/输出内存管理单元 (IOMMU) 是一项为 PCI 设备提供地址虚拟化的 CPU 功能。如果大量 I/O translation lookaside buffer (IOTLB) 未命中,则 IOMMU 可能会对网络性能产生负面影响。

  • 使用小型网页时,您更有可能发生未命中。
  • 为获得最佳性能,建议使用大型页面(大小为 2 MB 到 1 GB)。

存储性能

硬件详细信息

存储空间受以下硬件限制的影响:

  • 所有永久性磁盘的总大小与 vCPU 数量相结合决定了总存储性能。如果有不同类型的永久性磁盘挂接到虚拟机,则虚拟机上的所有磁盘均受 SSD 永久性磁盘性能限制影响。如需了解详情,请参阅块存储性能
  • 在 Persistent Disk 和 Hyperdisk 与出站数据传输流量竞争的情况下,最大出站网络带宽的 60% 用于 Persistent Disk 和 Hyperdisk,剩余 40% 可用于出站网络数据传输。如需了解详情,请参阅影响性能的其他因素
  • I/O 大小和队列深度性能取决于工作负载。某些工作负载可能不够大,无法使用完整的 I/O 大小和队列深度性能限制。
  • 虚拟机的机器类型会影响其存储性能。如需了解详情,请参阅机器类型和 vCPU 数量

如需了解虚拟机的存储性能,请查看吞吐量操作 (IOPS)I/O 大小I/O 延迟时间队列长度的性能指标

磁盘吞吐量和 IOPS 可指示虚拟机工作负载是否按预期运行。如果吞吐量或 IOPS 低于磁盘类型图表中列出的预期最大值,则可能存在 I/O 大小、队列长度或 I/O 延迟性能问题。

对于需要高 IOPS 和低延迟时间的工作负载,预计 I/O 大小在 4-16 KiB 之间,而涉及顺序或大写入大小的工作负载则有 256 KiB-1 MiB 的需求。超出这些范围的 I/O 大小表示磁盘性能问题。

队列长度(也称为队列深度)是吞吐量和 IOPS 的一个因素。当磁盘性能良好时,其队列长度应与推荐的队列长度大致相同,以实现特定吞吐量或 IOPS 级别,列在推荐的 I/O 队列深度图表中。

I/O 延迟时间取决于队列长度和 I/O 大小。如果磁盘的队列长度或 I/O 大小较高,则延迟时间也会较高。

如果任何存储性能指标指示磁盘性能问题,请执行以下一项或多项操作: