簡體   English   中英

在 Docker 容器中運行時的 .NET Core 分析

[英].NET Core Profiling When Running in Docker Container

我正在使用 asp.net core 2.2 和 Visual Studio 2019。我的應用程序運行的容器是 Debian(官方 aspnet:2.2 docker 映像之一)

所以我的情況是這樣的。 我有一個由 4 個在 docker 容器中運行的微服務組成的應用程序,當負載不足時,我發現容器節點上的 CPU 使用率非常高。 我想要做的是分析執行代碼以了解此資源使用發生的位置。

作為起點,我想我只是在本地開發環境上運行一些分析,只是為了大致了解執行情況。 盡管在生產中它在 Kubernetes 中運行,但我確實有一個使用 docker compose 的開發環境,並且我發現 Visual Studio Docker 工具相當不錯。

我希望使用一些 Visual Studio 分析工具。 我能夠在我本地運行的容器之一上安裝 VSDBG,並在診斷窗格中使用 VS BUT 連接到它,我看到“診斷工具窗口不支持當前的調試配置”。 我還嘗試使用 docker compose 從 VS 運行項目,但是當我遇到斷點時看到相同的消息。 我沒有找到太多關於如何做到這一點的信息。

我還嘗試使用 perfcollect 進行分析,但是在我生成跟蹤並使用 perfviewer 打開它之后,我在嘗試查看 cpu 堆棧時遇到了解析錯誤。 仍然不確定那里發生了什么。 我確實在他們的github上發現了一個舊的封閉問題,描述了我所看到的內容,但最近有人評論說他們看到的是最新版本,所以也許這是一個回歸。

所以..畢竟這..我的問題是這個。 上述方法中的任何一種都可行嗎? 有沒有更好的方法來實現這一目標? 我對有人成功查看在 linux docker 容器上運行的 .net core 2.2 應用程序的一些代碼分析感興趣的任何方式。 我真正想要做的就是能夠看到執行時間在我的代碼中的哪個位置以及正在消耗哪些資源。 正如我所提到的,當我谷歌搜索時,我沒有找到太多東西,而且我似乎一直在碰壁。 如果有人對這里的方法有任何建議或方向,我將不勝感激。 非常感謝!

您是否願意升級到 .Net Core 3.0(.Net Core 2.2 將在幾天內停止支持: 12/23/2019

如果您對此持開放態度,則可以利用新工具dotnet-trace ,該工具支持在 linux 容器中運行,並可與 Visual Studio 中的工具一起使用。

以下是我用來將其添加到我的項目中的步驟:

  1. 更改您的基礎映像以使用 sdk 映像(需要安裝該工具)。
  2. 將安裝工具添加到鏡像中:
RUN dotnet tool install --global dotnet-trace
ENV PATH $PATH:/root/.dotnet/tools

或者,如果您不想將其添加到您的映像中,您可以在正在運行的容器中運行以下命令(只要它基於 SDK 映像):

dotnet tool install --global dotnet-trace
export PATH="$PATH:/root/.dotnet/tools"
  1. 在不調試的情況下啟動項目 (Ctrl+F5)

  2. 使用容器工具窗口打開終端窗口

運行命令:

dotnet-trace collect --process-id $(pidof dotnet) --providers Microsoft-DotNETCore-SampleProfiler

完成收集后按 Enter 或 Ctrl+C 結束收集

這將創建一個名為“trace.nettrace”的文件

默認情況下,將在其中創建該文件的 /app 文件夾是映射到您的項目文件夾的卷。 您可以在 VS 中從那里打開文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM