日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

译 | .NET Core 3.0 对诊断的改进

發布時間:2023/12/4 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 译 | .NET Core 3.0 对诊断的改进 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:Sourabh Shirhatti

翻譯:Edi Wang

在 .NET Core 3.0 中,我們將引入一套工具,這些工具利用 .NET 運行時中的新功能,使診斷和解決性能問題變得更加容易。

這些運行時功能可幫助您回答一些常見的診斷問題:

  • 我的應用程序是否正常?

  • 為什么我的應用程序有異常行為?

  • 為什么我的應用程序崩潰?

我的應用程序是否正常?


通常,應用程序可能會緩慢地開始泄漏內存,并最終導致內存不足異常。其他時候,某些有問題的代碼路徑可能會導致 CPU 利用率激增。這些只是您可以主動根據 Metrics(指標)識別出的一類問題。

Metrics(指標)

指標是時間間隔內數據度量的表示形式。指標(或時間序列)數據允許您在高級別上觀察系統的狀態。與 Windows 上的 .NET Framework不同,.NET Core不會產生 perf 計數器。相反,我們引入了一種通過EventCounter API 在 .NET Core 中發出指標的新方法。

EventCounter提供了對 Windows perf 計數器的改進,因為這些計數器現在可用于支持 .NET Core 的所有操作系統。此外,與 perf 計數器不同,它們也可用于低特權環境 (如 xcopy 部署) 。遺憾的是,缺少性能監視器 (perfmon) 這樣的工具,因此很難實時使用這些指標。

dotnet-counters

在 3.0-preview5 中,我們將引入一種新的命令行工具,用于實時觀察 .NET Core應用程序發出的指標。

您可以通過運行以下命令來安裝此 .NET 全局工具。

dotnet tool install --global dotnet-counters --version 1.0.3-preview5.19251.2

在下面的示例中,我們看到當我們將負載生成器指向 Web 應用程序時,應用程序的 CPU 利用率和工作集內存跳轉。

(譯者注:由于平臺限制,無法嵌入視頻,請閱讀原文查看以上工具的屏幕錄像)

有關如何使用此工具的詳細說明,請查看 dotnet-counter readme?(https://github.com/dotnet/diagnostics/blob/master/documentation/dotnet-counters-instructions.md)。

有關dotnet-counter的已知限制,請查看 GitHub 上的未解決的問題(https://github.com/dotnet/diagnostics/issues?q=is%3Aopen+is%3Aissue+label%3Adotnet-counters)。

為什么我的應用程序有異常行為?


雖然指標有助于識別異常行為的發生,但它們對出錯的原因幾乎無法了解。要回答應用程序為何出現異常行為的問題,您需要通過跟蹤(traces)收集其他信息。例如,通過跟蹤收集的 CPU 配置文件可以幫助您識別代碼中的熱點路徑。

Tracing (跟蹤)

跟蹤是不可變離散事件的時戳記錄。跟蹤包含本地上下文,允許您更好地推斷系統的命運。傳統上,.NET Framework (以及ASP.NET等框架)通過 Windows 事件跟蹤 (ETW) 發出有關其內部的診斷跟蹤。在 .NET Core中,這些跟蹤寫入了 Windows 上的 ETW 和 Linux 上的 LTTng。

dotnet-trace

在 3.0-preview5 中,每個 .NET Core 應用程序都會打開一個名為 EventPipe 的雙工管道(Windows 上的Unix域套接字*nix/named管道),它可以在其上發出事件。當我們仍在研究控制器協議時,dotnet-trace實現了此協議的預覽版本。

您可以通過運行以下命令來安裝此 .NET 全局工具:

dotnet tool install --global dotnet-trace--version 1.0.3-preview5.19251.2

(譯者注:由于平臺限制,無法嵌入視頻,請閱讀原文查看以上工具的屏幕錄像)

在上面的示例中,我使用啟用 CPU 探查器事件和 .NET 運行時事件的默認配置文件運行 dotnet-trace。

除了默認事件之外,還可以根據嘗試執行的調查啟用其他提供程序。

因為運行了 dotnet-trace,您會得到一個 .netperf 文件。此文件包含運行時事件和可按視圖可視化的采樣 CPU 堆棧。Visual Studio (16.1) 的下一次更新還將添加對這些跟蹤可視化的支持。

如果在捕獲跟蹤時在 OS X 或 Linux 上運行,則可以選擇將這些 .netperf 文件轉換為 .speedscope.json 文件,這些文件可以通過 Speedscope.app 進行可視化。

您可以通過運行以下命令來轉換現有跟蹤文件:

dotnet trace convert <input-netperf-file>

下面的冰柱圖可視化了我們剛剛在speedscope里捕獲的追蹤:

有關如何使用此工具的詳細說明,請查看 dotnet-trace readme(https://github.com/dotnet/diagnostics/blob/master/documentation/dotnet-trace-instructions.md)。有關dotnet-trace的已知限制,請查看 GitHub 上的未解決問題(https://github.com/dotnet/diagnostics/issues?q=is%3Aopen+is%3Aissue+label%3Adotnet-trace)。

為什么我的應用程序會爆?


在某些情況下,僅通過跟蹤進程就無法確定導致異常行為的原因。如果進程崩潰或可能需要更多信息(如訪問整個流程堆)的情況,則進程轉儲可能更適合分析。

轉儲分析(Dump Analysis)

轉儲是進程意外終止時通常捕獲的進程的工作虛擬內存狀態的記錄。診斷核心轉儲文件通常用于識別應用程序崩潰或意外行為的原因。

傳統上,您依靠操作系統在應用程序崩潰(例如Windows 錯誤報告)時捕獲轉儲,或者使用 procdump 等工具在滿足某些觸發條件時捕獲轉儲。

到目前為止,在 Linux 上使用 .NET 捕獲轉儲的挑戰是使用 gcore 或調試器捕獲轉儲,導致轉儲非常大,因為現有工具不知道在 .NET Core 進程中要修剪哪些虛擬內存頁。

此外,即使收集了這些轉儲,也難以分析這些轉儲,因為它需要獲取調試器并將其配置為加載 sos,這是 .NET 的調試器擴展。

dotnet-dump

3.0.0-preview5中,我們引入了一個新的工具,允許您捕獲和分析 Windows 和 Linux 上的進程轉儲。

dotnet-dump 仍處于活躍開發狀態,下表顯示了當前在哪些操作系統上支持的功能。

您可以通過運行以下命令來安裝此 .NET 全局工具:

dotnet tool install --global dotnet-dump --version 1.0.3-preview5.19251.2

安裝 dotnet-dump后,可以通過運行以下命令來捕獲進程轉儲:

sudo $HOME/.dotnet/tools/dotnet-dump collect -p <pid>

在 Linux 上,可以通過運行以下命令加載生成的轉儲來分析生成的轉儲:

dotnet dump analyze <dump-name>

在下面的示例中,我嘗試通過遍歷堆來確定已崩潰轉儲ASP.NET Core托管環境。

(譯者注:由于平臺限制,無法嵌入視頻,請閱讀原文查看以上工具的屏幕錄像)

結尾


感謝您在 .NET Core 3.0 中嘗試新的診斷工具。請繼續向我們提供反饋,無論是在評論中還是在 GitHub 上。我們正在認真傾聽,并將繼續根據您的反饋進行更改。


總結

以上是生活随笔為你收集整理的译 | .NET Core 3.0 对诊断的改进的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。