诊断应用程序的性能问题可能很困难,尤其是在应用在动态云的生产环境中运行时。 在管道中处理请求的基础结构、框架或应用程序代码可能会导致应用程序中的响应速度缓慢。
代码优化是 Azure Application Insights 中基于 AI 的服务,与适用于 .NET 的 Application Insights Profiler 协同工作。 它们一起检测代码级别的 CPU 和内存使用性能问题。 他们提供有关如何解决这些问题的建议。
使用从生产环境收集的实时性能数据和见解,做出明智的决策并优化代码。
代码优化和 Application Insights Profiler (.NET)
.NET Profiler 与代码优化协同工作,为性能问题检测提供全面的方法。
代码优化
代码优化可识别、分析和解析 Application Insights Profiler for .NET 收集的分析数据。 当 .NET Profiler 将数据上传到 Application Insights 时,我们的机器学习模型会分析一些数据,以查找应用程序代码可以优化的位置。 代码优化:
- 显示随时间而收集的聚合数据。
- 将数据与应用程序代码中的方法和函数连接。
- 通过查找代码中的瓶颈来缩小罪魁祸首范围。
- 基于洞察提供代码级性能优化。
分析
在从您的环境中通过 .NET Profiler 跟踪和 Snapshot Debugger 快照收集数据后,如果启用了该功能,代码优化将每小时提供代码级建议。 默认情况下,聚合数据视图显示最近发现问题的滚动 24 小时窗口,其中包含 30 天的历史记录供你查看和分析过去的事件。
解析
识别和分析代码优化后,可以使用 Azure 门户中的 “复制详细信息 ”按钮将见解上下文手动引入你喜欢的工具,例如 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,或 - 新适用于 .NET 的 Azure Monitor OpenTelemetry Profiler(预览版)使用 Azure Monitor OpenTelemetry 发行版 |
| Azure App 服务 | 您的应用程序无需变更代码 | 由于 Profiler 已预安装,因此可以在 Azure 门户中为以下项启用 Profiler for .NET: - Azure 应用服务 - Windows 上的 .NET 应用 - Azure Functions - 应用服务计划 |
| 虚拟机 | 您的应用程序无需变更代码 | 在应用程序代码中启用 Application Insights SDK 后,可以在 ARM 模板中为 .NET 启用 Profiler。 - 适用于 Windows 的 Azure 虚拟机和虚拟机规模集 - Azure Service Fabric |
有关为 .NET 启用 Profiler 的详细信息和示例
容器:
- Azure 容器应用
- Azure Kubernetes 服务
- Azure 容器实例
注释
还可以使用适用于 Azure Monitor Application Insights 的 Java 探查器(目前为预览版)。
支持的区域
代码优化可在 Application Insights 所在的区域中使用。 可以使用以下命令检查可用区域:
az account list-locations -o table
可以使用连接字符串设置显式区域。 有关详细信息,请参阅 连接字符串示例。
局限性
Profiler
-
分析 Web 应用:
- 要使用 .NET Profiler 无需额外费用,但前提是您的 Web 应用必须至少托管在 Web 应用功能的基本层。
- 每个 Web 应用只能附加 1 个探查器。
代码优化
-
存储要求:
- 目前,代码优化仅适用于默认探查器或 Application Insights 存储。 它与自带存储(BYOS)不兼容。
故障排除
探查器
如果为 .NET 启用了 Profiler 但未看到跟踪,请参阅 故障排除指南。
代码优化
遇到问题了? 查看 代码优化故障排除指南 以获取场景解决方案。
相关内容
了解如何在 Azure 服务上启用具有代码优化的 .NET Profiler: