排查 Application Insights Profiler for .NET 问题

本文提供故障排除步骤和信息,以帮助您在.NET中使用 Application Insights Profiler。

您是否使用了适当的 .NET 分析器端点?

目前,由世纪互联运营的 Azure 区域需要修改端点。

应用设置 由世纪互联运营的Azure
ApplicationInsightsProfilerEndpoint https://profiler.monitor.azure.cn
ApplicationInsightsEndpoint https://dc.applicationinsights.azure.cn

应用是否在正确的版本上运行?

Profiler 支持 高于 4.6.2 的 .NET Framework 版本。

如果 Web 应用是 ASP.NET Core 应用程序,则必须在 最新支持的 ASP.NET Core 运行时上运行。

是否使用正确的Azure服务计划?

免费或共享应用服务计划目前不支持用于.NET的探查器。 请升级到 Profiler 的某个基本方案以开始工作。

注意

不支持 Azure Functions 消费计划。 请参阅 启用 .NET 探查器用于 Azure Functions 应用

您是否在正确的时间范围内搜索.NET探查器数据?

如果要查看的数据的期限超过两周,请尝试限制时间筛选器并重试。 七天后跟踪记录将被删除。

你是否知道.NET探查器采样率和开销?

.NET Profiler 在每个启用 Profiler 的虚拟机上每小时随机运行两分钟。

注意

当 .NET 的 Application Insights Profiler 正在运行并收集跟踪时,通常会为服务器增加 5% 到 15% 的处理器和内存负荷。

没有额外的成本用于存储由 .NET Profiler 捕获的数据。 该数据将在 15 天后自动删除。

是否可以访问网关?

请检查防火墙或代理是否未阻止你访问此网页

你是否遇到超时问题或需要检查 .NET Profiler 是否在运行?

仅当探查器可以将数据附加到在探查器运行时发生的请求时,探查器才会上传分析数据。 .NET Profiler每小时收集数据两分钟。 还可以通过 启动分析会话来触发探查器。

探查器将跟踪消息和自定义事件写入 Application Insights 资源。 可以使用这些事件来查看探查器是如何运行的。

搜索.NET Profiler 发送到 Application Insights 资源的跟踪消息和自定义事件。

  1. 在 Application Insights 资源中,从顶部菜单中选择“搜索”。

    显示从 Application Insights 资源中选择“搜索”按钮的屏幕截图。

  2. 使用以下搜索字符串查找相关数据:

    stopprofiler OR startprofiler OR upload OR ServiceProfilerSample
    

    显示上述搜索字符串的搜索结果的屏幕截图。

    前面的搜索结果包括来自两个 AI 资源的两个搜索实例:

    • 如果应用程序在探查器运行时未收到请求,消息将说明上传因没有活动而被取消。

    • 探查器在检测到探查器运行时发生的请求时启动并发送自定义事件。 如果显示ServiceProfilerSample自定义事件,则表示已捕获的配置文件可在 Application Insights 性能页面中使用。

    如果未显示任何记录,探查器未运行或响应时间过长。 请确保在 Azure 服务上启用了 Profiler

.NET Profiler 处于开启状态,但未捕获到任何踪迹

即使启用了 Profiler,它可能不会捕获或上传跟踪数据,特别是在以下情况中:

  1. 应用程序没有收到传入请求

    可以手动调用应用程序或创建可用性测试

  2. Application Insights 未确认任何传入遥测

    • 如果流量传入应用程序:验证 Application Insights 实时指标 是否显示传入请求。
    • 如果 图表为空(无数据或显示为零),请< c1>排查 Application Insights 的相关问题。
    • 如果在 Azure 应用服务 上托管.NET应用程序,请参阅 Troubleshoot Application Insights 与 Azure 应用服务 集成。
  3. 采样的探查器设置已关闭

    如果没有可用的探查器跟踪,请检查探查器采样设置。

    1. 打开 Application Insights>性能
    2. 选择“探查器”。
    3. 选择 “触发器 ”按钮。
    4. 在“触发器设置”中,确保 采样 处于打开状态。
  4. 依然没有上传跟踪记录吗?

    创建支持请求或询问Azure社区支持。 还可以将产品反馈提交到 Azure 反馈社区

并行线程中的双重计数

当两个或多个并行线程与请求关联时,堆栈查看器的总时间指标可能会超过请求的持续时间。 在这种情况下,线程总时间超过实际已用时间。

例如,一个线程可能会等待另一个线程完成。 查看器会尝试检测此情况并省略不相关的等待时间。 这样,它会倾向于显示过多信息,而不是省略关键信息。

如果看到跟踪中出现并行线程,请确定哪些线程处于等待状态,以便可以查明请求的热路径。 通常,快速进入等待状态的线程在其他线程上等待。 专注于其他线程,忽略处于等待中的线程所用时间。

排查在你特定 Azure 服务上的 .NET 性能分析器问题

以下部分将指导你完成在 Azure 应用服务 上使用 Profiler 的故障排除步骤。

Azure 应用服务

若要使.NET探查器正常工作,请确保:

  • 使用正确的设置为 Web 应用启用 Application Insights

  • 运行 ApplicationInsightsProfiler3 WebJob。 检查 WebJob:

    1. 转到 Kudu。 在Azure门户中:

      1. 在应用服务实例中,选择左窗格中 的高级工具

      2. 选择“Go”按钮。

    2. 在顶部菜单中,选择工具>WebJobs 仪表板。 “WebJobs”窗格随即打开。

      如果 ApplicationInsightsProfiler3 未显示,请重启应用服务应用程序。

      显示 WebJob 窗格中显示作业的名称、状态和上次运行时间的屏幕截图。

    3. 若要查看 WebJob 的详细信息(包括日志),请选择“ApplicationInsightsProfiler3”链接。 “连续 WebJob 详细信息”窗格随即打开。

      连续 WebJob 详细信息窗格的显示截图。

如果 .NET 性能分析器仍然不起作用,请下载日志并提交 Azure 支持票证。

查看诊断服务站点扩展的状态页

如果在 Azure 门户中通过 Application Insights 页面启用了 .NET Profiler,诊断服务站点扩展将对其进行管理。 可以转到 https://{site-name}.scm.chinacloudsites.cn/DiagnosticServices 来查看此扩展的状态页。

注意

状态页链接的域因云而异。 此域与应用服务的 Kudu 管理站点相同。 状态页显示 .NET Profiler 和 Snapshot Debugger 代理的安装状态。 如果出现意外错误,则会显示有关如何修复此错误的步骤。

状态页显示 .NET Profiler 和 Snapshot Debugger 代理的安装状态。 如果出现意外错误,则会显示该错误以及如何修复它的步骤。

你可以使用应用服务的 Kudu 管理网站来获取此状态页的基本 URL:

  1. 在Azure门户中打开应用服务应用程序。

  2. 选择“高级工具”

  3. 选择“Go”按钮。

  4. 在 Kudu 管理平台上:

    1. /DiagnosticServices 附加到该 URL。
    2. 选择 Enter。

其结尾类似于 https://<kudu-url>/DiagnosticServices

状态页显示类似于以下示例。

显示“诊断服务”状态页的屏幕截图。

注意

适用于 .NET 的 Application Insights Profiler 的无代码安装遵循 .NET 核心支持策略。 有关支持的运行时的详细信息,请参阅 .NET Core 支持策略

手动安装

配置 .NET Profiler 时,该过程将更新 Web 应用的设置。 如有必要,可以手动应用更新

配置 .NET Profiler 时,将对 Web 应用的设置进行更新。 如有必要,可以手动应用更新

活跃分析会话过多

在 Azure 应用服务 中,每个 VM 同时只能进行一个性能分析会话。 此限制在 VM 级别跨应用服务计划中运行的所有应用程序和部署槽位强制实施。 此限制同样适用于通过 Diagnose and solve problems、Kudu 和 Application Insights Profiler for .NET 启动的分析会话。

对于横向扩展到多个实例的单个应用,每个实例在单独的 VM 上运行,并且可以独立运行自己的分析会话。 仅当同一应用服务计划上的多个应用或部署槽位共享同一 VM 时,才会发生争用。

如果.NET探查器试图在同一台VM上开始新的会话,而另一个会话已在运行,则会在应用程序日志以及 ApplicationInsightsProfiler3 相关的持续 WebJob 日志中记录错误。

日志中可能会显示以下消息之一:

  • Microsoft.ServiceProfiler.Exceptions.TooManyETWSessionException
  • Error: StartProfiler failed. Details: System.Runtime.InteropServices.COMException (0xE111005E): Exception from HRESULT: 0xE111005E

错误代码 0xE111005E 指示分析会话无法启动,因为另一个会话已在运行中。

若要避免错误并降低部署日志中的干扰:

  • 将某些 Web 应用移动到其他应用服务计划,以便它们不共享 VM。
  • 在不需要分析的应用程序上禁用 Profiler。
  • 停止任何未使用的部署槽位。 每个正在运行的插槽都有活动的探查器,并在其 VM 上竞争探查会话。
  • 在部署过程中,考虑暂时禁用临时插槽上的探查器,以防止插槽交换触发并发会话引起的错误。

部署错误:目录不为空“D:\home\site\wwwroot\App_Data\jobs”

如果要将 Web 应用重新部署到启用了 .NET Profiler 的Web 应用资源,可能会看到以下消息:

“目录不为空 'D:\home\site\wwwroot\App_Data\jobs'”

如果从脚本或Azure Pipelines运行 Web 部署,则会发生此错误。 解决方法是将以下部署参数添加到 Web 部署任务:

-skip:Directory='.*\\App_Data\\jobs\\continuous\\ApplicationInsightsProfiler.*' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs\\continuous$' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs$'  -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data$'

这些参数删除用于 Application Insights Profiler .NET 的文件夹,并解除对重新部署过程的阻碍。 它们不影响当前运行的 Profiler 实例。

Application Insights Profiler for .NET 是否正在运行?

Profiler 在 Web 应用中以连续 WebJob 的形式运行。 可以在 Azure 门户中打开 Web 应用资源。 在“WebJobs”窗格中,查看 ApplicationInsightsProfiler 的状态 。 如果探查器未运行,请打开“日志”获取详细信息。

虚拟机

若要查看 Azure 诊断是否正确配置了 .NET Profiler:

  1. 验证已部署Azure 诊断配置是否符合预期。

  2. 验证部署的Azure 诊断配置的内容是否为预期内容。

  3. 请确保Azure 诊断在 Profiler 命令行上传递正确的 iKey。

  4. 请确保Azure 诊断在 Profiler 命令行上传递正确的 iKey。

  5. 查看 Profiler 日志文件,查看.NET Profiler 是否已运行,但返回了错误。

检查用于配置Azure 诊断的设置:

  1. 登录到虚拟机。

  2. 在此位置打开日志文件。 此插件在你的计算机上可能是更新的版本。

    c:\WindowsAzure\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
    
  3. 在文件中搜索字符串 WadCfg,以查找Azure 诊断传递给虚拟机以配置Azure 诊断的设置。

  4. 验证 .NET Profiler 接收器使用的 iKey 是否正确。

  5. 检查用于启动 Profiler 的命令行。 命令行参数位于以下文件中(驱动器可以是 c:d:,目录可能已隐藏):

    C:\ProgramData\ApplicationInsightsProfiler\config.json
    
  6. 确保 Profiler 命令行中的 iKey 是正确的。

  7. 使用上述 config.json 文件中找到的路径,检查名为 BootstrapN.log 的 Profiler 日志文件。 其中显示:

    • 表示 Profiler 正在使用的设置的调试信息。
    • 来自 Profiler 的状态和错误消息。

    可在以下位置找到文件:

    C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
    
  8. 如果应用程序收到请求时.NET Profiler 正在运行,则会出现以下消息:“从 iKey 检测到的活动”。

  9. 上传跟踪时,会显示以下消息:“开始上传跟踪”。

编辑网络代理或防火墙规则

如果应用程序使用代理或防火墙连接到 Internet,则可能需要更新规则以与 .NET Profiler 通信。

Application Insights Profiler 用于.NET的 IP 地址包含在Azure Monitor服务标记中。 有关详细信息,请参阅 Azure 服务标记概述

支持

如果仍需要帮助,请在 Azure 门户中选择问号图标,提交支持工单。 请包含错误消息中的相关 ID。