排查 Azure 应用服务中出现的 HTTP 错误“502 错误的网关”和“503 服务不可用”

Azure 应用服务中托管的应用经常出现“502 错误的网关”和“503 服务不可用”错误。 本文帮助你排查这些错误。

如果在本文中有任何需要协助的地方,可以联系 MSDN Azure 和堆栈溢出论坛上的 Azure 专家。 或者,也可以提出 Azure 支持事件。 请转到 Azure 支持站点,并单击“获取支持”。

症状

浏览应用时返回 HTTP 错误“502 错误的网关”或 HTTP 错误“503 服务不可用”。

原因

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

  • 请求耗费过长的时间
  • 应用程序的内存/CPU 使用率过高
  • 应用程序因异常而崩溃

解决“502 错误的网关”和“503 服务不可用”错误的故障排除步骤

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

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

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

1.观察和监视应用程序行为

跟踪服务运行状况

每次发生服务中断或性能下降时 Azure 会进行宣传。 可以在 Azure 门户中跟踪服务的运行状况。 有关详细信息,请参阅跟踪服务的运行状况

监视应用

此选项可让你找出应用程序是否存在任何问题。 在应用的边栏选项卡中,单击“请求和错误”磁贴。 “指标”边栏选项卡显示所有可以添加的指标。

可能需要在应用中监视的一些指标包括

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

monitor app towards solving HTTP errors of 502 bad gateway and 503 service unavailable

有关详细信息,请参阅:

2.收集数据

使用诊断工具

应用服务提供了智能的交互式体验,可帮助我们排查应用的问题,且无需配置。 如果应用确实出现问题,诊断工具会指出问题所在,并引导你获取适当的信息,以便更轻松快速地排查和解决问题。

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

使用 Kudu 调试控制台

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

转到链接 https://<Your app name>.scm.chinacloudsites.cn/ 即可访问此仪表板。

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

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

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

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

3.缓解问题

缩放应用

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

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

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

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

使用 AutoHeal

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

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

重启应用

这通常是在发生一次性问题后进行恢复的最简单方式。 Azure 门户的应用边栏选项卡中提供了用于停止或重启应用的选项。

restart app to solve HTTP errors of 502 bad gateway and 503 service unavailable

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