Azure 应用服务的 Web 应用性能、可用性和应用程序问题

注意

以下一些准则可能仅适用于 Windows 应用 服务或 Linux 应用服务。 例如,默认情况下,Linux 应用服务以 64 位模式运行。

概要

本文解答了有关 Azure 应用服务 Web 应用功能的应用程序性能问题的常见问题(常见问题解答)。

可从何处了解有关各种应用服务计划的配额和限制的详细信息?

有关配额和限制的信息,请参阅应用服务限制

即使停止所有 Web 应用,我的应用服务计划也会显示 CPU 或内存使用情况

应用服务需要持续系统进程来处理多个平台操作和功能,例如安全更新、SCM (Kudu) 控制台的可用性、应用程序监视、身份验证和其他许多 Web 应用功能。

即使没有正在运行的 Web 应用,或者应用服务计划不包含 Web 应用,系统进程也会在应用服务计划中运行。

平台进程消耗最少的资源(例如 CPU、内存和磁盘空间),应在应用服务计划的容量规划、监视和自动缩放触发器配置期间考虑这些资源。

我的应用性能缓慢

有多种因素可能导致应用性能降低。 有关问题排查的详细步骤,请参阅 Troubleshoot slow web app performance(排查导致 Web 应用性能降低的问题)。

小窍门

  • “配置>下启用 AlwaysOn 设置,使应用保持暖和避免冷启动。 此设置有助于在空闲时间后减少延迟,尤其是在基本计划和更高计划中。
  • 配置运行状况检查路径以监视应用运行状况并自动替换无响应实例。 此配置有助于维护可用性和性能。 有关详细信息,请参阅 通过运行状况检查监视应用服务实例

如何排查 CPU 使用率过高的问题?

在某些高 CPU 消耗方案中,你的应用可能确实需要更多计算资源。 在这种情况下,请考虑扩展到较高服务层级,以便应用程序可获取所需的所有资源。 其他情况下,高 CPU 占用可能是由错误循环或编码实践导致的。 深入了解 CPU 占用升高的触发因素这一过程分为两部分。 首先,生成进程转储,然后分析该进程转储。 有关详细信息,请参阅捕获和分析 Web 应用高 CPU 占用的转储文件

如何排查内存消耗过高问题?

在某些高内存消耗方案中,你的应用可能确实需要更多计算资源。 在这种情况下,请考虑扩展到较高服务层级,以便应用程序可获取所需的所有资源。 在其他情况下,代码中存在的 bug 可能会导致内存泄漏。 编码做法还可能会增加内存消耗。 深入了解内存占用高的触发因素这一过程分为两部分。 首先,生成进程转储,然后分析该进程转储。 Azure 站点扩展库中的故障诊断程序可高效执行这两个步骤。 有关详细信息,请参阅捕获和分析 Web 应用间歇性高内存的转储文件

如何使用 PowerShell 实现应用服务 Web 应用的自动化?

可以使用 PowerShell cmdlet 管理和维护应用服务 Web 应用。 有关如何使用基于 Azure 资源管理器 的 PowerShell cmdlet 自动执行常见任务的详细信息,请参阅使用 Azure 应用服务 中托管的自动化 Web 应用

注意

对于当前的自动化脚本,请使用最新的 Az.Websites 模块。 旧 AzureRM 模块已弃用。

我需要收集信息来排查 Web 应用问题

查看 Web 应用的事件日志

若要查看 Web 应用的事件日志,请执行以下步骤:

  1. 登录到您的Kudu 网站https://*yourwebsitename*.scm.azurewebsites.net)。
  2. 在菜单中,选择调试控制台>CMD
  3. 选择“LogFiles”文件夹。
  4. 若要查看事件日志,请选择 eventlog.xml 旁的铅笔图标。
  5. 若要下载日志,请运行 PowerShell cmdlet Save-AzureWebSiteLog -Name webappname

捕获 Web 应用的用户模式内存转储

若要捕获 Web 应用的用户模式内存转储,请执行以下步骤:

  1. 登录到您的Kudu 网站https://*yourwebsitename*.scm.azurewebsites.net)。
  2. 选择“进程资源管理器”菜单。
  3. 右键单击“w3wp.exe”进程或 WebJob 进程。
  4. 选择下载内存转储>完整转储

查看 Web 应用的进程级信息

可通过两种方法查看 Web 应用的进程级信息:

  • Azure 门户中:

    1. 打开 Web 应用的“进程资源管理器”。
    2. 若要查看详细信息,请选择“w3wp.exe”进程。
  • 在 Kudu 控制台中:

    1. 登录到您的Kudu 网站https://*yourwebsitename*.scm.azurewebsites.net)。
    2. 选择“进程资源管理器”菜单。
    3. 对于“w3wp.exe”进程,选择“属性”。

使用应用服务的本地缓存功能时,无法在 Web 应用的文件夹结构中找到日志文件

如果使用应用服务的本地缓存功能,它将影响应用服务实例的 LogFiles 和数据文件夹的文件夹结构。 使用本地缓存时,系统会在存储 LogFiles 和数据文件夹中创建子文件夹。 子文件夹使用命名模式“唯一标识符”加上时间戳。 每个子文件夹对应于运行或运行 Web 应用的虚拟机(VM)实例。

若要确定是否使用本地缓存,请检查应用服务 应用程序设置 选项卡。如果系统使用本地缓存,则应用设置 WEBSITE_LOCAL_CACHE_OPTION 设置为 Always

启用失败请求跟踪

若要启用失败请求跟踪,请执行以下步骤:

  1. 在 Azure 门户中,转到自己的 Web 应用。

  2. 选择“所有设置”>“诊断日志”

  3. 对于失败请求跟踪,请选择

  4. 选择“保存”。

  5. 在 Web 应用边栏选项卡,选择“工具”

  6. 选择“Visual Studio Online”

  7. 如果该设置不是“开”,请选择“开”

  8. 选择转到

  9. 选择 Web.config

  10. 在 system.webServer 中,添加以下配置(用于捕获特定 URL):

    <system.webServer>
    <tracing> <traceFailedRequests>
    <remove path="*api*" />
    <add path="*api*">
    <traceAreas>
    <add provider="ASP" verbosity="Verbose" />
    <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
    <add provider="ISAPI Extension" verbosity="Verbose" />
    <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression, Cache,RequestNotifications,Module,FastCGI" verbosity="Verbose" />
    </traceAreas>
    <failureDefinitions statusCodes="200-999" />
    </add> </traceFailedRequests>
    </tracing>
    
  11. 若要对性能缓慢问题进行故障排除,请添加此配置(如果捕获请求时间超过 30 秒):

    <system.webServer>
    <tracing> <traceFailedRequests>
    <remove path="*" />
    <add path="*">
    <traceAreas> <add provider="ASP" verbosity="Verbose" />
    <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
    <add provider="ISAPI Extension" verbosity="Verbose" />
    <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression, Cache,RequestNotifications,Module,FastCGI" verbosity="Verbose" />
    </traceAreas>
    <failureDefinitions timeTaken="00:00:30" statusCodes="200-999" />
    </add> </traceFailedRequests>
    </tracing>
    
  12. 若要下载失败请求跟踪日志,请在 Azure 门户中转到你的网站。

  13. 选择工具>Kudu>转到

  14. 在菜单中,选择调试控制台>CMD

  15. 选择 LogFiles 文件夹,然后选择名称以 W3SVC 开头的文件夹。

  16. 若要查看 XML 文件,请选择铅笔图标。

有关性能和复原能力的其他建议

  • 使用 Application Insights 和 Azure Monitor 实现应用服务应用的全堆栈可观测性,包括遥测、依赖项跟踪和实时指标。

  • 如果要在支持可用性区域的区域进行部署,请考虑启用区域冗余以增强区域中断期间的复原能力。 有关详细信息,请参阅 Azure 应用服务中的可靠性

  • 应用服务会进行例行维护,以确保平台可靠性。 若要更好地控制更新行为,尤其是在应用服务环境 v3 中,请配置升级首选项。 有关详细信息,请参阅 Azure 应用服务的例程(计划)维护