診斷應用程式的效能問題可能很困難,尤其是在動態雲端中的生產環境上執行時。 如果應用程式中的回應緩慢,那麼有可能是管線中處理要求的基礎結構、架構或應用程式程式碼所造成。
程式代碼優化是 Azure 應用程式 Insights 中的 AI 型服務,可與適用於 .NET 的 Application Insights Profiler 搭配運作,以偵測程式代碼層級的 CPU 和記憶體使用量效能問題,並提供有關如何修正它們的建議。
使用從生產環境收集的即時效能資料和深入解析,做出明智的決策並將您的程式碼最佳化。
適用於 .NET 的程式碼最佳化和 Application Insights Profiler
.NET Profiler 和程式碼優化會共同運作,以提供效能問題偵測的整體方法。
程式碼最佳化
程式碼最佳化會識別、分析及解析「適用於 .NET 的 Application Insights Profiler」所收集的分析資料。 當 .NET Profiler 將數據上傳至 Application Insights 時,我們的機器學習模型會分析一些數據,以找出應用程式程式代碼可以優化的位置。 程式碼最佳化:
- 顯示一段時間內收集到的彙總資料。
- 在應用程式程式碼中使用方法和函式連接資料。
- 藉由找出程式碼中的瓶頸來消弭問題根源。
- 根據深入解析提供程式碼層級效能修正。
識別
使用 程式代碼優化整合概觀頁面,您可以在 Azure 入口網站中查看 Azure 訂用帳戶和 Application Insights 資源的所有程式代碼優化建議。 識別程式代碼中的瓶頸,並檢閱開發、測試、生產前和生產環境的程式代碼層級建議。
分析
收集環境的數據之後,程式代碼優化會每小時提供程式碼層級建議。 根據預設,匯總的數據檢視會顯示最近識別問題的滾動 24 小時視窗,其中包含 30 天的歷程記錄,可供您檢閱和分析過去的事件。
解析
識別和分析程式代碼優化結果之後,您可以使用程式代碼優化 Visual Studio 和 Visual Studio Code 延伸模組來解決程式碼中的這些問題。 透過這些擴充功能,與 GitHub Copilot 互動,以接收基於程式優化見解的錯誤修正。
您也可以從 Azure 入口網站中的 [程式代碼優化] 頁面建立 GitHub 問題,並將 它指派給 GitHub Copilot 編碼代理程式。 從那裡,GitHub Copilot 會開啟拉取請求,並根據程式碼優化的見解推送程式碼變更提交。
示範影片
適用於 .NET 的 Application Insights Profiler
.NET Profiler 著重於追蹤特定要求,精確到毫秒。 它可以提供您應用程式內問題的絕佳「整體」檢視,以及解決問題的一般最佳做法。
透過適用於 .NET 的 Application Insights Profiler,不論案例為何,您都可以擷取、識別及檢視在 Azure 中執行之應用程式的效能追蹤。 .NET Profiler 追蹤程式會自動大規模地發生,而且不會對使用者造成負面影響。 .NET Profiler 會識別:
- 客戶執行之每個 Web 請求的回應時間中間值、最快值和最慢值。
- 處理特定 Web 要求時花費最多時間的「經常性」程式路徑。
在所有 Azure 應用程式上啟用 .NET 效能分析器,以使用下列觸發器收集資料:
- 取樣觸發程序:大約每小時隨機啟動一次 Profiler,持續兩分鐘。
- CPU 觸發程序:當 CPU 使用率百分比超過 80% 時啟動 Profiler。
- 記憶體觸發程序:當記憶體使用率高於 80% 時啟動 Profiler。
這些每一個觸發程序都可以加以設定、啟用或停用。
成本和額外負荷
啟用適用於 .NET 的 Application Insights Profiler 之後,系統會自動產生程式代碼優化。 根據預設,Profiler 會每小時主動收集 30 秒的追蹤,或在高 CPU 或記憶體使用量期間收集 30 秒的追蹤。 每小時追蹤 (稱為取樣) 非常適合用於主動微調,而高 CPU 和記憶體追蹤 (稱為觸發程序) 則有助於進行回應式疑難排解。
備註
當適用於 .NET 的 Application Insights Profiler 正在主動執行及收集追蹤時,通常會將 5% 到 15% 的 CPU 和記憶體額外負荷新增至伺服器。
儲存 .NET Profiler 所擷取的數據不需要額外費用。 在 15 天後即會自動刪除資料。
某些程式代碼優化功能(例如程式代碼層級修正建議)需要 適用於 GitHub 的 Copilot 和/或 適用於 Azure 的 Copilot。
啟用 .NET Profiler
隨著架構和 Azure 服務的發展,您可以透過許多選項,為在 Azure 上執行的 .NET 應用程式啟用 .NET Profiler。
Azure 服務 | 如何啟用 | 詳細資訊 |
---|---|---|
大部分的 Azure 服務 | 應用程式中的程式代碼變更 (最普遍) |
如果您的 .NET 應用程式在 Azure PaaS 服務或容器的變體上執行,您可以選擇兩個選項來啟用 .NET Profiler: - 使用 Application Insights SDK 的 Application Insights Profiler for ASP.NET Core (英文),或是 - 使用 Azure 監視器 OpenTelemetry 發行版本的新Azure 監視器 OpenTelemetry Profiler for NET (預覽版) (英文) |
Azure App Service | 您的應用程式不需要更改程式碼 | 由於已預先安裝 Profiler,因此您可以在入口網站中,為下列服務啟用適用於 .NET 的 Profiler: - Azure App Service - Windows 上的 .NET 應用程式 - Azure Functions - App Service 方案 |
虛擬機 | 您的應用程式不需要更改程式碼 | 在應用程式程式代碼中啟用 Application Insights SDK 之後,您可以在 ARM 範本中啟用適用於 .NET 的分析工具。 - 適用於 Windows 的 Azure 虛擬機和虛擬機擴展集 - Azure Service Fabric |
啟用適用於 .NET 的 Profiler 的詳細數據和範例
- Azure App Service - Windows 上的 .NET 應用程式
- Azure App Service - Linux 上的 .NET 應用程式
- 容器:
- Azure 容器應用服務
- Azure Kubernetes Services
- Azure 容器實例
- 適用於 Windows 的 Azure 虛擬機器和虛擬機器擴展集
- Azure Functions - App Service 方案
- Azure Service Fabric
備註
您也可以使用 Java Profiler for Azure Monitor Application Insights (目前處於預覽狀態)。
支援的區域
程式碼最佳化可在與 Application Insights 相同的區域中使用。 您可以使用下列命令來檢查可用的區域:
az account list-locations -o table
您可以使用連接字串來設定明確的區域。 透過範例深入了解連線字串。
局限性
剖析 Web 應用程式:
- 雖然您可以不需額外費用使用 .NET Profiler,但您的 Web 應用程式必須至少裝載在 Azure App 服務 Web Apps 功能的基本層中。
- 您只能將一個分析工具附加到每個 Web 應用程式。
故障排除
分析工具
如果您已啟用適用於 .NET 的 Profiler,但未看到追蹤,請參閱 疑難解答指南。
程式代碼優化
遇到問題了嗎? 請查看 代碼優化疑難解答指南,以獲取解決案例的方案。
後續步驟
瞭解如何在 Azure 服務上使用程式代碼優化來啟用 .NET Profiler: