使用代码优化监视和分析运行时行为

诊断应用程序的性能问题可能很困难,尤其是在动态云中的生产环境中运行时。 应用程序中的响应速度缓慢可能是由处理管道中请求的基础结构、框架或应用程序代码引起的。

代码优化(Azure Application Insights 中基于 AI 的服务)与适用于 .NET 的 Application Insights Profiler 协同工作,在代码级别检测 CPU 和内存使用性能问题,并就如何修复这些问题提供建议。

使用从生产环境收集的实时性能数据和见解,做出明智的决策并优化代码。

可以在 Azure 门户中查看代码优化。

代码优化和 Application Insights Profiler (.NET)

.NET Profiler 与代码优化协同工作,为性能问题检测提供全面的方法。

代码优化

代码优化可识别、分析和解析 Application Insights Profiler for .NET 收集的分析数据。 当 .NET Profiler 将数据上传到 Application Insights 时,我们的机器学习模型会分析一些数据,以查找应用程序代码可以优化的位置。 代码优化:

  • 显示随时间而收集的聚合数据。
  • 将数据与应用程序代码中的方法和函数连接。
  • 通过查找代码中的瓶颈来缩小问题范围。
  • 基于洞察提供代码级性能优化。

分析

收集环境数据后,代码优化会每小时提供代码级建议。 默认情况下,聚合数据视图显示最近发现问题的滚动 24 小时窗口,其中包含 30 天的历史记录供你查看和分析过去的事件。

解析

识别和分析代码优化结果后,可以使用代码优化 Visual Studio 和 Visual Studio Code 扩展在代码中解决这些问题。 使用这些扩展,与 GitHub Copilot 交互,以接收基于代码优化见解的代码修复。

Application Insights Profiler (.NET)

.NET Profiler 侧重于跟踪特定请求,以毫秒为单位。 它针对应用程序中的问题提供出色的“大局”视图,以及解决这些问题的一般最佳做法。

使用 Application Insights Profiler for .NET,无论在何种情况下,都可以捕获、识别和查看 Azure 中运行的应用程序的性能跟踪。 .NET Profiler 跟踪过程自动大规模执行,并且不会对用户产生负面影响。 .NET Profiler 将识别:

  • 客户发出的每个 Web 请求的平均、最快和最慢响应时间。
  • 在处理特定 Web 请求时最耗时的“热点”代码路径。

在所有 Azure 应用程序上启用 Profiler for .NET,以使用以下触发器收集数据:

  • 采样触发器:大约每小时随机启动一次 Profiler,持续 2 分钟。
  • CPU 触发器:当 CPU 使用率百分比超过 80% 时启动 Profiler。
  • 内存触发器:当内存使用率超过 80% 时启动 Profiler。

可以配置、启用或禁用上述每个触发器。

成本和开销

启用 适用于 .NET 的 Application Insights Profiler 后,会自动生成代码优化。 默认情况下,探查器每小时主动收集 30 秒的日志,或者在 CPU 或内存使用率过高期间收集 30 秒的日志。 每小时跟踪(称为采样)非常适合主动优化,而高 CPU 和内存跟踪(称为触发器)对于被动故障排除非常有用。

备注

Application Insights Profiler for .NET 主动运行并收集跟踪时,通常会导致服务器的 CPU 和内存开销增加 5% 至 15%。

存储 .NET Profiler 捕获的数据无需额外付费。 该数据将在 15 天后自动删除。

某些代码优化功能(如代码级修复建议)需要适用于 GitHub 的 Copilot

启用 .NET Profiler

随着框架和 Azure 服务的发展,可以通过多种选项为在 Azure 上运行的 .NET 应用启用 .NET Profiler。

Azure 服务 如何启用 详细信息
大多数 Azure 服务 应用程序中的代码更改
(最普遍)
如果 .NET 应用在 Azure PaaS 服务或容器的变体上运行,可以在两个选项之间进行选择,以便启用 .NET Profiler:
- Application Insights Profiler for ASP.NET Core ,使用 Application Insights SDK,或
- 新的Azure Monitor OpenTelemetry Profiler for NET(预览版),它使用 Azure Monitor OpenTelemetry Distro
Azure 应用服务 您的应用程序无需变更代码 由于预安装了 Profiler,因此可以在门户中为以下项启用 Profiler for .NET:
- Azure 应用服务 - Windows 上的 .NET 应用
- Azure Functions - 应用服务计划
虚拟机 您的应用程序无需变更代码 在应用程序代码中启用 Application Insights SDK 后,可以在 ARM 模板中为 .NET 启用 Profiler。
- 适用于 Windows 的 Azure 虚拟机和虚拟机规模集
- Azure Service Fabric

有关为 .NET 启用 Profiler 的详细信息和示例

备注

还可以使用适用于 Azure Monitor Application Insights 的 Java 探查器(目前为预览版)。

支持的区域

代码优化可在 Application Insights 所在的区域中使用。 可以使用以下命令检查可用区域:

az account list-locations -o table

可以使用连接字符串设置显式区域。 通过示例详细了解连接字符串

局限性

分析 Web 应用

  • 虽然可以免费使用 .NET Profiler,但 Web 应用必须至少托管在 Azure 应用服务 Web 应用功能的基本层中。
  • 每个 Web 应用只能附加 1 个探查器。

故障排除

后续步骤

了解如何在 Azure 服务上启用具有代码优化的 .NET Profiler: