Docker 容器中 运行 时的 .NET Core 分析
.NET Core Profiling When Running in Docker Container
我正在使用 asp.net core 2.2 和 Visual Studio 2019。我的应用程序 运行 使用的容器是 Debian(官方 aspnet:2.2 docker 图片)
所以我的情况是这样的。我有一个由 docker 容器中的 4 个微服务 运行 组成的应用程序,当它处于负载状态时,我发现容器节点上的 cpu 使用率非常高。我想做的是分析执行代码以了解此资源使用的位置。
作为起点,我想我会简单地对我的本地开发环境进行一些分析 运行,只是为了了解执行的总体情况。尽管在生产环境中它运行在 Kubernetes 中,但我确实有一个使用 docker compose 的开发环境,而且我发现 Visual Studio Docker 工具相当不错。
我希望使用一些 visual studio 分析工具。我能够在我的本地 运行 容器之一上安装 VSDBG,并使用 VS 连接到它,但在我看到 "the diagnostic tools window does not support the current debugging configuration" 的诊断窗格中。我也尝试过 运行 VS 使用 docker compose 的项目,但是当我遇到断点时,我看到了相同的消息。我没有找到太多有关如何执行此操作的信息。
我也尝试使用 perfcollect 进行分析,但是在我生成跟踪并使用 perfviewer 打开它之后,我在尝试查看 cpu 堆栈时遇到了解析错误。仍然不确定那里发生了什么。我确实在他们的 github 上找到了一个旧的已关闭问题,描述了我所看到的,但最近有人发表评论说他们看到的是最新版本,所以这可能是一个倒退。
所以..毕竟..我的问题是这个。以上两种方法是否可行?有没有更好的方法来实现这一目标?我对有人成功查看 linux docker 容器上的 .net core 2.2 应用程序 运行 的一些代码分析感兴趣。我真正想做的就是能够看到我的代码中执行时间的去向以及正在消耗的资源。正如我所提到的,当我为此 Google 时并没有发现太多,而且我似乎一直在碰壁。如果有人对这里的方法有任何建议或指导,我将非常感激。非常感谢!
您是否愿意升级到 .Net Core 3.0(.Net Core 2.2 将在几天内停止支持:12/23/2019)
如果您对此持开放态度,可以利用新工具 dotnet-trace,它支持 运行 在 linux 容器中运行,并且可以与 Visual Studio.
以下是我将其添加到项目中的步骤:
- 更改您的基础映像以使用 sdk 映像(需要安装该工具)。
- 镜像添加安装工具:
RUN dotnet tool install --global dotnet-trace
ENV PATH $PATH:/root/.dotnet/tools
或者,如果您不想将它添加到您的映像中,您可以 运行 在 运行ning 容器中执行以下命令(只要它基于 SDK 映像):
dotnet tool install --global dotnet-trace
export PATH="$PATH:/root/.dotnet/tools"
不调试启动项目(Ctrl+F5)
运行命令:
dotnet-trace collect --process-id $(pidof dotnet) --providers Microsoft-DotNETCore-SampleProfiler
收集完成后按回车键或Ctrl+C结束收集
这将创建一个名为“trace.nettrace”的文件
默认情况下,将在其中创建文件的 /app 文件夹卷映射到您的项目文件夹。您可以在 VS 中从那里打开文件。
我正在使用 asp.net core 2.2 和 Visual Studio 2019。我的应用程序 运行 使用的容器是 Debian(官方 aspnet:2.2 docker 图片)
所以我的情况是这样的。我有一个由 docker 容器中的 4 个微服务 运行 组成的应用程序,当它处于负载状态时,我发现容器节点上的 cpu 使用率非常高。我想做的是分析执行代码以了解此资源使用的位置。
作为起点,我想我会简单地对我的本地开发环境进行一些分析 运行,只是为了了解执行的总体情况。尽管在生产环境中它运行在 Kubernetes 中,但我确实有一个使用 docker compose 的开发环境,而且我发现 Visual Studio Docker 工具相当不错。
我希望使用一些 visual studio 分析工具。我能够在我的本地 运行 容器之一上安装 VSDBG,并使用 VS 连接到它,但在我看到 "the diagnostic tools window does not support the current debugging configuration" 的诊断窗格中。我也尝试过 运行 VS 使用 docker compose 的项目,但是当我遇到断点时,我看到了相同的消息。我没有找到太多有关如何执行此操作的信息。
我也尝试使用 perfcollect 进行分析,但是在我生成跟踪并使用 perfviewer 打开它之后,我在尝试查看 cpu 堆栈时遇到了解析错误。仍然不确定那里发生了什么。我确实在他们的 github 上找到了一个旧的已关闭问题,描述了我所看到的,但最近有人发表评论说他们看到的是最新版本,所以这可能是一个倒退。
所以..毕竟..我的问题是这个。以上两种方法是否可行?有没有更好的方法来实现这一目标?我对有人成功查看 linux docker 容器上的 .net core 2.2 应用程序 运行 的一些代码分析感兴趣。我真正想做的就是能够看到我的代码中执行时间的去向以及正在消耗的资源。正如我所提到的,当我为此 Google 时并没有发现太多,而且我似乎一直在碰壁。如果有人对这里的方法有任何建议或指导,我将非常感激。非常感谢!
您是否愿意升级到 .Net Core 3.0(.Net Core 2.2 将在几天内停止支持:12/23/2019)
如果您对此持开放态度,可以利用新工具 dotnet-trace,它支持 运行 在 linux 容器中运行,并且可以与 Visual Studio.
以下是我将其添加到项目中的步骤:
- 更改您的基础映像以使用 sdk 映像(需要安装该工具)。
- 镜像添加安装工具:
RUN dotnet tool install --global dotnet-trace
ENV PATH $PATH:/root/.dotnet/tools
或者,如果您不想将它添加到您的映像中,您可以 运行 在 运行ning 容器中执行以下命令(只要它基于 SDK 映像):
dotnet tool install --global dotnet-trace
export PATH="$PATH:/root/.dotnet/tools"
不调试启动项目(Ctrl+F5)
运行命令:
dotnet-trace collect --process-id $(pidof dotnet) --providers Microsoft-DotNETCore-SampleProfiler
收集完成后按回车键或Ctrl+C结束收集
这将创建一个名为“trace.nettrace”的文件
默认情况下,将在其中创建文件的 /app 文件夹卷映射到您的项目文件夹。您可以在 VS 中从那里打开文件。