Azure 应用服务中托管的应用经常出现“502 错误的网关”和“503 服务不可用”错误。 本文帮助你排查这些错误。
如果在本文中有任何需要协助的地方,可以联系 MSDN Azure 和堆栈溢出论坛上的 Azure 专家。 或者,也可以提出 Azure 支持事件。 请转到 Azure 支持站点,并单击“获取支持”。
症状
浏览应用时返回 HTTP 错误“502 错误的网关”或 HTTP 错误“503 服务不可用”。
原因
此问题通常是应用程序级别的问题造成的,例如:
- 请求耗费过长的时间
- 应用程序的内存/CPU 使用率过高
- 应用程序因异常而崩溃
解决“502 错误的网关”和“503 服务不可用”错误的故障排除步骤
故障排除可划分为三种不同的任务,依次为:
应用服务在每个步骤提供了多种选项。
1.观察和监视应用程序行为
跟踪服务运行状况
每次发生服务中断或性能下降时 Azure 会进行宣传。 可以在 Azure 门户中跟踪服务的运行状况。 有关详细信息,请参阅跟踪服务的运行状况。
监视应用
此选项可让你找出应用程序是否存在任何问题。 在应用的边栏选项卡中,单击“请求和错误”磁贴。 “指标”边栏选项卡显示所有可以添加的指标。
可能需要在应用中监视的一些指标包括
- 平均内存工作集
- 平均响应时间
- CPU 时间
- 内存工作集
- 请求
有关详细信息,请参阅:
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 门户上的应用边栏选项卡中提供了用于停止或重启应用的选项。
还可以使用 Azure Powershell 管理应用。 有关详细信息,请参阅将 Azure PowerShell 与 Azure 资源管理器配合使用。