【问题标题】:.NET Core Profiling When Running in Docker Container在 Docker 容器中运行时的 .NET Core 分析
【发布时间】:2019-12-16 20:50:38
【问题描述】:

我正在使用 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 应用程序的一些代码分析的任何方式感兴趣。我真正想做的就是能够看到我的代码中的执行时间在哪里以及正在消耗哪些资源。正如我所提到的,当我用谷歌搜索这个时,我并没有发现太多东西,而且我似乎一直在碰壁。如果有人对这里的方法有任何建议或指导,我将不胜感激。非常感谢!

【问题讨论】:

    标签: visual-studio docker asp.net-core .net-core profiling


    【解决方案1】:

    您是否愿意升级到 .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. 使用Containers Tool Window to open a terminal window

    运行命令:

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

    收集完成后按回车键或Ctrl+C结束收集

    这将创建一个名为“trace.nettrace”的文件

    默认情况下,将在其中创建该文件的 /app 文件夹是卷映射到您的项目文件夹。您可以在 VS 中从那里打开文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-31
      • 2021-10-26
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      相关资源
      最近更新 更多