排查 Linux 或 Windows 上的 Azure 虚拟机性能问题
适用于:✔️ Linux VM ✔️ Windows VM
本文介绍通过监视和观察瓶颈进行虚拟机(VM)通用性能故障排除,并为可能发生的问题提供可能的修正。 除了监视之外,还可以使用 Perfinsights,它可提供有关 IO/CPU/内存的最佳做法建议和关键瓶颈的报告。 Perfinsights 适用于 Azure 中的 Windows 和 Linux VM。
本文将逐步介绍如何使用监视来诊断性能瓶颈。
通过Azure 门户启用 VM 诊断
若要启用 VM 诊断,请执行以下操作:
通过Azure 门户查看存储帐户指标(对于非托管磁盘)
对于使用 非托管磁盘的 VM,当我们打算分析 IO 性能时,存储是一个非常重要的层。 对于与存储相关的指标,我们需要启用诊断作为附加步骤:
通过选择 VM 来确定 VM 正在使用的存储帐户(或帐户):
- 在Azure 门户中,选择 VM。
- 在“设置”下,选择“磁盘”,然后找到保存磁盘的存储帐户。
- 导航到存储帐户并选择“ 指标”。
查明性能瓶颈
完成所需指标的初始设置过程,并在为 VM 和相关存储帐户启用诊断后,我们可以转移到分析阶段。
访问监视
在Azure 门户中,选择要调查的 Azure VM,选择“监视”部分的“指标”,然后选择一个指标。
观察时间线
若要确定是否有任何资源瓶颈,请查看数据。 如果发现计算机运行正常,但已报告性能最近已降级,请查看包含报告更改期间和之后的性能指标数据的时间范围。
检查 CPU 瓶颈
- 设置时间范围。
- 在“指标”中,选择“CPU 百分比”。
监视 CPU 性能趋势
查看性能问题时,请注意趋势并了解它们是否会影响你。 在接下来的部分中,我们将使用门户中的“监视”图来显示趋势。 它们还可用于在同一时间段内交叉引用差异资源行为。 若要自定义图形,请单击 Azure Monitor 数据平台。
Spiking – Spiking 可能与计划的任务/已知事件相关。 如果可以标识该任务,请确定任务是否在所需的性能级别运行。 如果性能是可接受的,则可能需要增加资源。
峰值上升和常量 – 通常表示新的工作负荷。 如果不是可识别的工作负荷,请启用 VM 中的监视,找出导致该行为的进程(或进程)。 识别进程后,确定消耗量增加是由低效代码还是正常消耗引起的。 如果正常消耗,请确定进程是否在所需的性能级别运行。
常量 – 确定 VM 是否始终在此级别运行,或者它是否仅在该级别运行,因为已启用诊断。 如果是,请确定导致问题的进程(或进程),并考虑添加更多该资源。
稳步增加 – 消耗量不断增加通常是低效代码或进程占用更多用户工作负荷的过程。
高 CPU 利用率修正
如果应用程序或进程未以最佳方式运行,并且 CPU 使用率保持在 95% 以上,则可以执行以下任一任务:
- 要立即缓解 - 将 VM 的大小提高到具有更多核心的大小
- 了解问题 - 找到应用程序/进程,并进行相应的故障排除。
如果增大了 VM,而 CPU 仍被占用 95% 以上,请确定该设置是否能提供更好的性能或更高的应用程序吞吐量,使其达到可接受的水平。 如果不能,则对单个应用程序/进程进行故障排除。
可以使用适用于 Windows 或 Linux 的 Perfinsights 来分析哪个进程正在推动 CPU 消耗。
检查内存瓶颈
若要查看指标:
- 添加分区。
- 添加磁贴。
- 打开库。
- 选择“内存使用情况”并拖动。 停靠磁贴后,右键单击并选择 6x4。
监视内存性能趋势
内存使用情况显示 VM 消耗了多少内存。 了解趋势,以及它是否映射到你看到问题的时间。 应始终具有超过 100 MB 的可用内存。
峰值和常量/恒定稳定消耗 - 高内存利用率可能不是性能不佳的原因,因为某些应用程序(如关系数据库引擎)分配了大量内存,并且此利用率可能并不重要。 但是,如果有多个内存不足的应用程序,则内存争用可能会导致剪裁和分页/交换到磁盘的性能不佳。 这种性能不佳通常是应用程序性能影响显著的原因。
稳步增加消耗 – 应用程序可能“预热”,这种消耗在启动数据库引擎时很常见。 然而,这也可能是应用程序内存泄漏的迹象。 确定应用程序并了解行为是否预期。
页面或交换文件使用情况 - 检查你使用的是 Windows 分页文件(位于 D:)还是 Linux 交换文件(位于) /dev/sdb
正在使用大量使用。 如果这些卷上除这些文件之外没有任何内容,请检查这些磁盘上的高读/写。 此问题表示内存不足的情况。
高内存利用率修正
若要解决内存使用率高的问题,请执行以下任一任务:
- 为了立即缓解或页面或交换文件使用情况 - 将 VM 大小增加到具有更多内存的 VM 大小,然后监视。
- 了解问题 – 查找应用程序/进程并排查用于识别高消耗内存应用程序的问题。
- 如果知道应用程序,请参阅是否可以限制内存分配。
如果升级到较大的 VM 后,发现仍保持稳定增长,直到 100%,确定应用程序/进程并排除故障。
可以使用 Perfinsights for Windows 或 Linux 来分析哪个进程正在驱动内存消耗。
检查磁盘瓶颈(对于非托管磁盘)
若要检查 VM 的存储子系统,请使用 VM 诊断和存储帐户诊断中的计数器检查 Azure VM 级别的诊断。
对于特定于 VM 的故障排除,可以使用 Perfinsights for Windows 或 Linux,这有助于分析推动 IO 的进程。
请注意,我们没有区域冗余和高级存储帐户的计数器。 对于与这些计数器相关的问题,请提出支持案例。
查看监视中的存储帐户诊断
若要处理以下项,请转到门户中 VM 的存储帐户:
- 设置时间范围。
- 将 指标命名空间 设置为 Blob。
- 将 指标 设置为 可用性。
监视磁盘性能趋势(仅限标准存储)
若要识别存储问题,请查看存储帐户诊断和 VM 诊断中的性能指标。
对于下面的每个检查,请在问题的时间范围内出现问题时查找关键趋势。
检查 Azure 存储可用性 - 添加存储帐户指标:可用性
如果看到可用性下降,则平台可能存在问题,请检查 Azure 状态。 如果没有出现任何问题,请提出新的支持请求。
检查 Azure 存储超时 - 添加存储帐户指标
- ClientTimeOutError
- ServerTimeOutError
- AverageE2ELatency
- AverageServerLatency
- TotalRequests
*TimeOutError 指标中的值指示 IO 操作花费的时间过长且超时。完成后续步骤将有助于确定潜在原因。
TimeOutErrors 同时增加 AverageServerLatency 可能是平台问题。 在这种情况下提出新的支持请求。
AverageE2ELatency 表示客户端延迟。 验证应用程序如何执行 IOPS。 查找增加或持续较高的 TotalRequests 指标。 此指标表示 IOPS。 如果开始达到存储帐户或单个 VHD 的限制,则延迟可能与限制相关。
检查 Azure 存储限制 - 添加存储帐户指标:ThrottlingError
限制的值表示在存储帐户级别受到限制,这意味着达到帐户的 IOPS 限制。 可以通过检查指标 TotalRequests 来确定是否达到 IOP 阈值。
请注意,每个 VHD 的限制为 500 IOPS 或 60 MBit,但受每个存储帐户 20000 IOPS 的累积限制的约束。
使用此指标,无法判断哪个 Blob 导致限制,哪些 Blob 受其影响。 但是,会达到存储帐户的 IOPS 或入口/出口限制。
若要确定是否达到 IOPS 限制,请转到存储帐户诊断并检查 TotalRequests,并查看是否接近 2 万个 TotalRequests。 确定模式中的更改、是首次看到限制还是在特定时间发生此限制。
使用标准存储下的新磁盘产品/服务时,IOPS 和吞吐量限制可能会有所不同,但标准存储帐户的累积限制为 20000 IOPS(高级存储在帐户或磁盘级别具有不同的限制)。 详细了解不同的标准存储磁盘产品/服务以及每个磁盘限制:
- Windows 上的 VM 磁盘的可伸缩性和性能目标。
参考
存储帐户的带宽由存储帐户指标:TotalIngress 和 TotalEgress 度量。 带宽的阈值不同,具体取决于冗余类型和区域:
根据存储帐户冗余类型和区域的入口和出口限制检查 TotalIngress 和 TotalEgress。
检查附加到 VM 的 VHD 的吞吐量限制。 添加 VM 指标磁盘读取和写入。
标准存储下的新磁盘产品/服务具有不同的 IOPS 和吞吐量限制(每个 VHD 不公开 IOPS)。 查看数据,看看是否达到了使用磁盘读取和写入在 VM 级别上组合吞吐量 MB 的限制,然后优化 VM 存储配置以缩放过去的单个 VHD 限制。 详细了解不同的标准存储磁盘产品/服务以及每个磁盘限制:
- Windows 上的 VM 磁盘的可伸缩性和性能目标。
高磁盘利用率/延迟修正
减少客户端延迟并优化 VM IO 以缩放超过 VHD 限制
减少限制
如果达到存储帐户的上限,请重新平衡存储帐户之间的 VHD。 请参阅Azure 存储可伸缩性和性能目标。
增加吞吐量并减少延迟
如果延迟敏感应用程序且需要高吞吐量,请使用 DS 和 GS 系列 VM 将 VHD 迁移到 Azure 高级存储。
以下文章讨论特定方案:
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。