排查 Linux 或 Windows 上的 Azure 虚拟机性能问题

本文介绍虚拟机 (VM) 通过监视和观察瓶颈进行常规性能故障排除,并为可能发生的问题提供可能的修正。 除了监视,还可以使用 Perfinsights,它可以提供报告,其中包含有关 IO/CPU/内存的最佳做法建议和关键瓶颈。 Perfinsights 适用于 Azure 中的 WindowsLinux VM。

本文介绍如何使用监视来诊断性能瓶颈。

启用监视

Azure IAAS 虚拟机监视

若要监视来宾 VM,请使用 Azure VM 监视,它会对某些高级资源状况发出警报。 若要检查是否启用了 VM 诊断,请参阅 Azure 资源日志概述。 如果看到以下内容,则很可能未启用诊断:

屏幕截图显示“可能未启用监视”消息。

通过 microsoft Azure 门户 启用 VM 诊断

启用 VM 诊断:

  1. 转到 VM。

  2. 单击“ 诊断设置”。

  3. 选择存储帐户,然后单击 “启用来宾级监视”。

    屏幕截图显示了启用 VM 诊断的步骤。

可以从“诊断设置”下的“代理”选项卡检查用于诊断设置的存储帐户。

屏幕截图突出显示了“代理”选项卡下的“存储帐户”。

通过 Azure 门户 启用存储帐户诊断

当我们打算分析 Azure 中虚拟机的 IO 性能时,存储是一个非常重要的层。 对于与存储相关的指标,我们需要启用诊断作为附加步骤。 如果只想分析与存储相关的计数器,也可以启用此功能。

  1. 通过选择 VM 确定 VM) 使用的存储帐户 (或帐户。 单击 “设置”,然后单击“ 磁盘”:

    屏幕截图显示磁盘下的 OS 磁盘。

  2. 在门户中,转到 VM 的存储帐户 (或帐户) ,并完成以下步骤:

    1. 单击上一步找到的存储帐户的概述。
    2. 将显示默认指标。

    屏幕截图显示了“概述”下的默认指标。

  3. 单击任何指标,其中会显示另一个边栏选项卡,其中包含更多用于配置和添加指标的选项。

    屏幕截图显示了添加和配置指标的步骤。

若要配置这些选项,请执行以下操作:

  1. 选择“ 指标”。
  2. 选择 “资源 (存储帐户) 。
  3. 选择 命名空间
  4. 选择“ 指标”。
  5. 选择聚合的类型
  6. 可以将此视图固定在仪表板上。

观察瓶颈

完成所需指标的初始设置过程,并在为 VM 和相关存储帐户启用诊断后,我们可以转移到分析阶段。

访问监视

选择要调查的 Azure VM,然后选择“ 监视”。

屏幕截图显示了“监视”面板。

观察时间线

若要确定是否存在任何资源瓶颈,请查看数据。 如果发现计算机一直运行正常,但已报告最近性能下降,请查看包含性能指标数据的数据的时间范围,在报告更改之前、问题期间和之后。

检查 CPU 瓶颈

屏幕截图显示了检查 CPU 瓶颈的步骤。

  1. 编辑图形。
  2. 设置时间范围。
  3. 然后,需要添加计数器:CPU 百分比来宾 OS
  4. 保存。

查看性能问题时,请注意趋势并了解它们是否会影响你。 在下一部分中,我们将使用门户中的监视图来显示趋势。 它们还可用于交叉引用同一时间段内的差异资源行为。 若要自定义图形,请单击“ Azure Monitor 数据平台”。

Spiking – Spiking 可能与计划任务/已知事件相关。 如果可以识别任务,请确定任务是否在所需的性能级别运行。 如果性能可以接受,则可能不需要增加资源。

峰值上升和常量 - 通常指示新的工作负载。 如果它不是已识别的工作负载,请在 VM 中启用监视,找出哪些进程 (或哪些进程) 导致该行为。 识别进程后,确定消耗增加是由低效代码引起的,还是正常消耗造成的。 如果正常使用,请确定进程是否在所需的性能级别运行。

常量 - 确定 VM 是始终在此级别运行,还是自启用诊断以来仅在该级别运行。 如果是这样,请确定导致问题的进程 (或) 进程,并考虑添加更多资源。

稳步增加 – 消耗的不断增加通常是低效的代码或进程占用更多用户工作负荷。

高 CPU 利用率修正

如果应用程序或进程未在正确的性能级别运行,并且你看到 95% + CPU 使用率常量,则可以执行以下任一任务:

  • 为了立即缓解 - 将 VM 的大小增加到具有更多核心的大小
  • 了解问题 - 找到应用程序/进程并相应地进行故障排除。

如果增加了 VM,并且 CPU 仍运行 95%,请确定此设置是提供更好的性能,还是将应用程序吞吐量提高到可接受的级别。 如果没有,请对单个应用程序\进程进行故障排除。

可以使用适用于 WindowsLinux 的 Perfinsights 来分析哪个进程正在推动 CPU 消耗。

检查内存瓶颈

查看指标:

  1. 添加分区。
  2. 添加磁贴。
  3. 打开库。
  4. 选择“内存使用情况”并拖动。 停靠磁贴后,右键单击并选择“ 6x4”。

内存使用情况显示 VM 占用的内存量。 了解趋势以及它是否映射到出现问题的时间。 应始终具有超过 100 MB 的可用内存。

峰值和常量/常量稳定消耗 - 内存利用率过高可能不是性能不佳的原因,因为某些应用程序(如关系数据库引擎)分配了大量内存,并且这种利用率可能并不显著。 但是,如果有多个内存不足的应用程序,则可能会看到内存争用导致修整和分页/交换到磁盘的性能不佳。 这种性能不佳通常是造成应用程序性能影响的一个明显原因。

稳步增加消耗 - 应用程序可能“预热”,这种消耗在启动的数据库引擎中很常见。 但是,它也可能是应用程序中内存泄漏的迹象。 确定应用程序并了解行为是否预期。

页面或交换文件使用情况 - 检查是使用位于 D:) 上的 Windows 分页文件 (,还是位于 /dev/sdb) 频繁使用的 Linux 交换文件 (。 如果除了这些文件之外,这些卷上没有任何内容,检查这些磁盘上的高读/写数。 此问题表明内存不足的情况。

高内存利用率修正

若要解决内存使用率过高的问题,请执行以下任一任务:

  • 为了立即缓解或页面或交换文件使用情况 - 将 VM 大小增加到具有更多内存的 VM 大小,然后监视。
  • 了解问题 - 查找应用程序/进程并进行故障排除,以识别高消耗内存应用程序。
  • 如果知道应用程序,请查看是否可以限制内存分配。

如果在升级到更大的 VM 后,发现仍持续稳定增长,直到 100%,确定应用程序/进程并对其进行故障排除。

可以使用适用于 WindowsLinux 的 Perfinsights 来分析哪个进程正在推动内存消耗。

检查磁盘瓶颈

若要检查 VM 的存储子系统,请使用 VM 诊断和存储帐户诊断中的计数器在 Azure VM 级别检查诊断。

对于特定于 VM 的故障排除,可以使用适用于 WindowsLinux 的 Perfinsights,这有助于分析哪个进程正在推动 IO。

请注意,我们没有区域冗余和高级存储帐户的计数器。 对于与这些计数器相关的问题,请提出支持案例。

查看监视中的存储帐户诊断

若要处理以下项,请在门户中转到 VM 的存储帐户:

屏幕截图显示了在“监视”中查看存储帐户诊断的步骤。

  1. 编辑监视图。
  2. 设置时间范围。
  3. 添加以下步骤中所述的计数器。
  4. 保存更改。

若要确定存储问题,请查看存储帐户诊断和 VM 诊断中的性能指标。

对于以下每个检查,在问题的时间范围内出现问题时,查找关键趋势。

检查 Azure 存储可用性 - 添加存储帐户指标:可用性

如果看到可用性下降,则平台可能存在问题,检查 Azure 状态。 如果其中未显示任何问题,请提出新的支持请求。

检查 Azure 存储超时 - 添加存储帐户指标

  • ClientTimeOutError
  • ServerTimeOutError
  • AverageE2ELatency
  • AverageServerLatency
  • TotalRequests

*TimeOutError 指标中的值表示 IO 操作花费的时间太长且超时。完成后续步骤将有助于确定潜在原因。

TimeOutErerErrors 同时增加 AverageServerLatency 可能是平台问题。 在这种情况下,提出新的支持请求。

AverageE2ELatency 表示客户端延迟。 验证应用程序如何执行 IOPS。 查找增加或持续高 TotalRequests 指标。 此指标表示 IOPS。 如果开始达到存储帐户或单个 VHD 的限制,则延迟可能与限制有关。

检查 Azure 存储限制 - 添加存储帐户指标:ThrottlingError

限制值指示你在存储帐户级别受到限制,这意味着达到帐户的 IOPS 限制。 可以通过检查指标 TotalRequests 来确定是否达到 IOPS 阈值。

请注意,每个 VHD 的限制为 500 IOPS 或 60 MBit,但受每个存储帐户 20000 IOPS 的累积限制的约束。

使用此指标时,无法判断是哪个 Blob 导致了限制,哪些 Blob 受其影响。 但是,你已达到存储帐户的 IOPS 或入口/出口限制。

若要确定是否达到 IOPS 限制,请转到存储帐户诊断并检查 TotalRequests,查看是否接近 20,000 个 TotalRequest。 确定模式中的更改,无论是第一次看到限制,还是在特定时间发生此限制。

对于标准存储下的新磁盘产品/服务,IOPS 和吞吐量限制可能会有所不同,但标准存储帐户的累积限制为 20000 IOPS, (高级存储在帐户或磁盘级别) 有不同的限制。 详细了解不同的标准存储磁盘产品/服务和每个磁盘的限制:

References

存储帐户的带宽由存储帐户指标度量:TotalIngress 和 TotalEgress。 带宽阈值不同,具体取决于冗余类型和区域。

根据存储帐户冗余类型和区域的入口和出口限制检查 TotalIngress 和 TotalEgress。

检查附加到 VM 的 VHD 的吞吐量限制。 添加 VM 指标磁盘读取和写入。

标准存储下的新磁盘产品/服务具有不同的 IOPS 和吞吐量限制, (不按 VHD) 公开 IOPS。 查看数据,了解是否达到了 VM 级别使用磁盘读取和写入的 VHD () 的组合吞吐量 MB 限制,然后优化 VM 存储配置以超过单个 VHD 限制。 详细了解不同的标准存储磁盘产品/服务和每个磁盘的限制:

高磁盘利用率/延迟修正

降低客户端延迟并优化 VM IO 以超过 VHD 限制

减少限制

如果达到存储帐户的上限,请在存储帐户之间重新平衡 VHD。 请参阅 Azure 存储可伸缩性和性能目标

提高吞吐量并减少延迟

如果具有延迟敏感型应用程序并且需要高吞吐量,请使用 DS 和 GS 系列 VM 将 VHD 迁移到 Azure 高级存储。

以下文章讨论特定方案:

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。