你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

排查 Azure 应用服务中应用性能缓慢的问题

本文帮助排查 Azure 应用服务中应用性能缓慢的问题。

如果在本文中的任何时刻需要更多帮助,请联系 Azure 社区支持处的 Azure 专家。 或者,也可以提出 Azure 支持事件。 转到 Azure 支持,然后选择 提交支持请求

症状

浏览应用时,页面加载缓慢,并且有时还会超时。

原因

此问题通常是应用程序级别的问题造成的,例如:

  • 网络请求需要很长时间
  • 应用程序代码或数据库查询效率低下
  • 使用高内存/CPU 的应用程序
  • 应用程序因异常而崩溃

疑难解答步骤

故障排除可划分为三种不同的任务,依次为:

  1. 观察和监视应用程序行为
  2. 收集数据
  3. 缓解问题

应用服务在每个步骤提供了多种选项。

观察和监视应用程序行为

跟踪服务运行状况

Azure 公开了每个服务中断或性能下降的情况。 可以在 Azure 门户中跟踪服务的运行状况。 有关详细信息,请参阅 使用 Azure 门户查看服务运行状况通知

监视应用

可以在 Azure 门户中使用监视工具来了解应用程序是否存在任何问题。 在边栏菜单中的 “监视 ”下,选择“ 指标”。 “ 指标 ”下拉菜单显示可以添加的所有指标。

你可能想要监视应用的一些指标包括:

  • 平均内存工作集
  • CPU 时间
  • 内存工作集
  • 请求
  • 响应时间

“监视”下的“指标”部分的屏幕截图。

有关详细信息,请参阅:

监视 Web 终结点状态

如果应用在 标准 定价层中运行,则应用服务允许从三个地理位置监视两个终结点。

终结点监视可从测试 Web URL 的响应时间和运行时间的分布式地理位置配置 Web 测试。 测试对 Web URL 执行 HTTP GET 操作,以确定每个位置的响应时间和正常运行时间。 每个已配置位置每 5 分钟运行一次测试。

使用 HTTP 响应代码监视运行时间,并且以毫秒为单位计算响应时间。 如果 HTTP 响应代码大于或等于 400 或响应时间超过 30 秒,则监视测试失败。 如果从所有指定的位置监视测试均成功,则终结点被视为可用。

若要设置它,请参阅 Azure 应用服务配额和指标

使用扩展监视应用程序性能

还可以使用站点扩展监视应用程序的性能。

每个应用服务应用都提供了一个可扩展的管理终结点,允许您使用部署为站点扩展的强大的工具集。 扩展包括:

  • 源代码编辑器(如 GitHub Codespaces)。
  • 连接的资源(如连接到应用的 MySQL 数据库)的管理工具。

Azure Application Insights 是也可用的性能监视站点扩展。 若要使用 Application Insights,请使用 SDK 重新生成代码。 还可以安装用于访问其他数据的扩展。 SDK 可用于编写代码,以便更详细地监视应用的使用情况和性能。 有关更多信息,请参阅 应用程序洞察介绍 - OpenTelemetry 可观察性

收集数据

应用服务为 Web 服务器和 Web 应用程序中的日志记录信息提供诊断功能。 此信息分为 Web 服务器诊断和应用程序诊断。

启用 Web 服务器诊断

可以启用或禁用以下种类的日志:

  • 详细错误日志记录:指示失败的 HTTP 状态代码的详细错误信息(状态代码 400 或更高版本)。 这可能包含有助于确定服务器返回错误代码的原因的信息。
  • 失败的请求跟踪:有关失败请求的详细信息,包括用于处理请求的 IIS 组件的跟踪以及每个组件中花费的时间。 如果尝试提高应用性能或隔离导致特定 HTTP 错误的原因,这非常有用。
  • Web 服务器日志记录:有关使用 W3C 扩展日志文件格式的 HTTP 事务的信息。 这在确定总体应用指标(如处理的请求数量或来自特定 IP 地址的请求数)时非常有用。

启用应用程序诊断

可通过多种选项收集应用服务中的应用程序性能数据、从 Visual Studio 中实时分析应用程序,或修改应用程序代码以记录更多信息和跟踪。 可以基于针对应用程序的访问权限和通过监视工具观察到的内容选择相关选项。

使用 Application Insights Profiler

可以启用 Application Insights Profiler 开始捕获详细的性能跟踪。 您可以在需要调查问题时访问最多五天前捕获的跟踪记录。 只要有权访问 Azure 门户中应用的 Application Insights 资源,就可以选择此选项。

Application Insights Profiler 提供每个 Web 调用的响应时间统计信息,以及指示哪个代码行造成响应缓慢的追踪信息。 有时应用服务应用速度缓慢,因为某些代码未以高性能方式编写。 示例包括可并行运行的顺序代码和不需要的数据库锁争用。 删除代码中的这些瓶颈会增加应用的性能,但是如果不设置详细的跟踪和日志,则很难检测这些瓶颈。 Application Insights Profiler 收集的跟踪信息有助于识别减慢应用程序速度的代码行,还有助于为应用服务应用解决这一挑战。

有关详细信息,请参阅 在 Windows 中为 Azure 应用服务应用启用 .NET Profiler

手动设置诊断跟踪

如果有权访问 Web 应用程序源代码,则应用程序诊断允许捕获 Web 应用程序生成的信息。 ASP.NET 应用程序可使用 System.Diagnostics.Trace 类将信息记录到应用程序诊断日志。 但是需要更改代码并重新部署应用程序。 如果应用在测试环境中运行,则推荐使用此方法。

有关如何配置应用程序进行日志记录的详细说明,请参阅 在 Azure 应用服务中为应用启用诊断日志记录

使用诊断工具

应用服务提供了智能的交互式体验,可帮助我们排查应用的问题,且无需配置。 当你遇到应用问题时,诊断工具会指出错误,引导你获取正确的信息,以便更轻松快捷地进行故障排除和解决问题。

若要访问应用服务诊断,请在 Azure 门户中导航到你的应用服务应用或应用服务环境。 在边栏菜单中,选择“ 诊断”并解决问题

使用 Kudu 调试控制台

应用服务随附可用于调试、浏览和上传文件的调试控制台,以及用于获取环境相关信息的 JSON 终结点。 此控制台称为应用的 Kudu 控制台或 SCM 仪表板。

您可以通过访问您的 Kudu 站点来查看该仪表板。

Kudu 提供的一些信息和功能包括:

  • 应用程序的环境设置
  • 日志流
  • 诊断转储
  • 可在其中运行 PowerShell cmdlet 和基本 DOS 命令的调试控制台

Kudu 的另一项有用功能是,如果应用程序引发第一次异常,可以使用 Kudu 和 SysInternals 工具 Procdump 创建内存转储。 这些内存转储是进程的快照,通常可帮助排查较复杂的应用问题。

有关 Kudu 中提供的功能的详细信息,请参阅 你应该了解的 Windows Azure 网站联机工具

缓解问题

缩放应用

在应用服务中,为了提高性能和吞吐量,可以调整运行应用程序的规模。 纵向扩展应用涉及两个相关的操作:将应用服务计划更改为更高的定价层,在切换到更高的定价层后,应配置某些设置。

有关缩放的详细信息,请参阅缩放 Azure 应用服务中的应用

此外,可以选择在多个实例上运行应用程序。 扩展不仅能提供更强大的处理功能,而且还能提供一定程度的容错。 如果进程在某个实例上中断,其他实例会继续处理请求。

可以将缩放设置为手动或自动缩放。

使用自动修复

自动修复会根据所选设置,例如配置更改、请求、基于内存的限制或执行请求所需的时间,以回收应用的工作进程。 在大多数情况下,回收过程是从问题中恢复最快的方法。 尽管始终都可从 Azure 门户中直接重启应用,但自动修复可以自动执行此操作。 只需在应用的根 web.config 中添加一些触发器即可。 即使应用程序不是 .NET 应用,这些设置也会以同样的方式工作。

有关详细信息,请参阅 自动修复 Azure 网站

重启应用

重启通常是在发生一次性问题后进行恢复的最简单方式。 在 Azure 门户中,可以选择停止或重启应用。

应用菜单栏的屏幕截图,其中显示了“停止”和“重启”按钮。

还可以使用 Azure Powershell 管理应用。 有关详细信息,请参阅 使用 Azure PowerShell管理 Azure 资源。