诊断应用程序的性能问题可能很困难,尤其是在动态云中的生产环境中运行时。 应用程序中的响应速度缓慢可能是由处理管道中请求的基础结构、框架或应用程序代码引起的。
代码优化(Azure Application Insights 中基于 AI 的服务)与适用于 .NET 的 Application Insights Profiler 协同工作,在代码级别检测 CPU 和内存使用性能问题,并就如何修复这些问题提供建议。
使用从生产环境收集的实时性能数据和见解,做出明智的决策并优化代码。
代码优化和 Application Insights Profiler (.NET)
.NET Profiler 与代码优化协同工作,为性能问题检测提供全面的方法。
代码优化
代码优化 可识别、分析和解析 Application Insights Profiler for .NET 收集的分析数据。 当 .NET Profiler 将数据上传到 Application Insights 时,我们的机器学习模型会分析一些数据,以查找应用程序代码可以优化的位置。 代码优化:
- 显示随时间而收集的聚合数据。
- 将数据与应用程序代码中的方法和函数连接。
- 通过查找代码中的瓶颈来缩小问题范围。
- 基于洞察提供代码级性能优化。
识别
使用 代码优化合并概述页,可以在 Azure 门户中查看 Azure 订阅和 Application Insights 资源中的所有代码优化建议。 确定代码中的瓶颈,并查看针对开发、测试、预生产和生产环境的代码级建议。
分析
收集环境数据后,代码优化会每小时提供代码级建议。 默认情况下,聚合数据视图显示最近发现问题的滚动 24 小时窗口,其中包含 30 天的历史记录供你查看和分析过去的事件。
解析
识别和分析代码优化结果后,可以使用代码优化 Visual Studio 和 Visual Studio Code 扩展在代码中解决这些问题。 使用这些扩展,与 GitHub Copilot 交互,以接收基于代码优化见解的代码修复。
还可以从 Azure 门户中的代码优化页创建 GitHub 问题, 并将其分配给 GitHub Copilot 编码代理。 在此处,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 天后自动删除。
某些代码优化功能(如代码级修复建议)需要 Copilot for GitHub 和/或 Copilot for Azure。
启用 .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 应用服务 - Windows 上的 .NET 应用
- Azure 应用服务 - Linux 上的 .NET 应用
- 容器:
- Azure 容器应用
- Azure Kubernetes 服务
- Azure 容器实例
- Azure 虚拟机和适用于 Windows 的虚拟机规模集群
- Azure Functions - 应用服务计划
- Azure 服务结构
注释
还可以使用适用于 Azure Monitor Application Insights 的 Java 探查器(目前为预览版)。
支持的区域
代码优化可在 Application Insights 所在的区域中使用。 可以使用以下命令检查可用区域:
az account list-locations -o table
可以使用连接字符串设置显式区域。 通过示例详细了解连接字符串。
局限性
分析 Web 应用:
- 虽然可以免费使用 .NET Profiler,但 Web 应用必须至少托管在 Azure 应用服务 Web 应用功能的基本层中。
- 每个 Web 应用只能附加 1 个探查器。
故障排除
探查器
如果已启用 Profiler for .NET 但未看到跟踪,请参阅故障排除指南。
代码优化
遇到问题了? 查看 代码优化故障排除指南 中的场景解决方案。
后续步骤
了解如何在 Azure 服务上启用具有代码优化的 .NET Profiler: