诊断应用程序的性能问题可能很困难,尤其是在应用在动态云的生产环境中运行时。 在管道中处理请求的基础结构、框架或应用程序代码可能会导致应用程序中的响应速度缓慢。
代码优化是 Azure 应用程序 Insights 中基于 AI 的服务,与适用于 .NET 的 Application Insights Profiler 协同工作。 它们一起检测代码级别的 CPU 和内存使用性能问题。 他们提供有关如何解决这些问题的建议。
使用从生产环境收集的实时性能数据和见解,做出明智的决策并优化代码。
代码优化和 Application Insights Profiler (.NET)
.NET Profiler 与代码优化协同工作,为性能问题检测提供全面的方法。
代码优化
代码优化可识别、分析和解决适用于 .NET 的 Application Insights Profiler 收集的性能分析数据中发现的问题。 当 .NET Profiler 将数据上传到 Application Insights 时,机器学习模型会分析一些数据,以查找可以优化应用程序代码的位置。 代码优化:
- 显示随时间而收集的聚合数据。
- 将数据与应用程序代码中的方法和函数连接。
- 通过查找代码中的瓶颈来缩小罪魁祸首范围。
- 基于洞察提供代码级性能优化。
分析代码级建议
代码优化从.NET探查器跟踪和快照调试器快照收集环境数据后(如果已启用)每小时提供代码级建议。 默认情况下,聚合数据视图显示最近发现问题的滚动 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 后,会自动生成代码优化。 默认情况下,.NET探查器每隔一小时收集 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
使用连接字符串设置显式区域。 有关详细信息,请参阅 连接字符串示例。
局限性
.NET 分析器限制
-
分析 Web 应用:
- 可以使用 .NET Profiler,无需额外付费,但必须在Web 应用功能的基本层中托管 Web 应用。
- 每个 Web 应用只能附加 1 个探查器。
代码优化限制
-
存储要求:
- 目前,代码优化仅支持默认的 .NET Profiler 或 Application Insights 存储。 它与自带存储(BYOS)不兼容。
故障排除
探查器
如果为 .NET 启用了 Profiler 但未看到跟踪,请参阅 故障排除指南。
代码优化
遇到问题了? 查看 代码优化故障排除指南 以获取场景解决方案。
相关内容
了解如何在 Azure 服务上启用具有代码优化的 .NET Profiler: