在 Docker 容器中分析应用程序
要分析运行在 Docker 容器中的 .NET 应用程序,请使用 dotMemory 命令行分析器。 要下载分析器并开始分析会话,您需要能够访问容器的 shell。
登录运行 Docker 的主机。
为了能够与应用程序容器通信,我们必须知道其 ID 或名称。 要获取它们,请运行:
docker ps示例输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e58110265dd6 my-aspnet-app "dotnet MyAspNetApp.…" 22 hours ago Up 22 hours 0.0.0.0:5142->5142/tcp my-aspnet-app-container这里
e58110265dd6是容器 ID,my-aspnet-app-container是名称。在 Docker 容器内启动一个 shell 会话。 您可以根据镜像的操作系统使用不同的命令行解释器,例如,
sh或/bin/bash。docker exec -it {container_ID_or_name} sh例如:
docker exec -it my-aspnet-app-container sh在容器中,下载并解压 dotMemory 命令行工具,例如到
dotMemoryclt文件夹:apt-get update -y && apt-get install -y wget && \ wget -O dotMemoryclt.zip https://www.nuget.org/api/v2/package/JetBrains.dotMemory.Console.linux-x64 && \ apt-get install -y unzip && \ unzip dotMemoryclt.zip -d ./dotMemoryclt && \ chmod +x -R dotMemoryclt/*这里:
apt是基于 Debian 系统的包管理器。 如果您的操作系统使用其他包管理器,请使用它代替apt。JetBrains.dotMemory.Console.linux-x64是适用于 Linux x64 系统的包名称。 此名称会根据目标平台而有所不同。 此处 您可以找到适用于各种平台的完整包列表。
在您可以附加到要分析的进程之前,必须获取进程 ID:
ps aux如果
ps命令在您的 Linux 发行版中不可用,请使用以下命令安装它:apt-get update && apt-get install procps示例输出:
# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.2 276055932 200960 ? Ssl Mar23 0:21 dotnet MyAspNetApp.dll --urls http://*:5142 root 914 0.0 0.0 2480 580 pts/0 Ss 05:33 0:00 sh root 2171 0.0 0.0 6756 2940 pts/0 R+ 12:55 0:00 ps aux分析进程。 例如:
要立即获取 PID 为
1的进程的快照:./dotMemoryclt/tools/dotmemory get-snapshot 1要附加到 PID 为
1的进程:./dotMemoryclt/tools/dotmemory attach 1要获取快照,请使用标准输入消息:
##dotMemory["get-snapshot"]
有关使用命令行工具的更多信息,请参阅相应的 主题。
要停止分析并保存收集的数据,请按 Ctrl+C 。
要结束容器中的 shell 会话,请运行
exit。将工作区文件复制到主机。 为此,请在主机上运行以下命令:
docker cp {container_ID_or_name}:/{path_to_workspace_file} {path_to_folder_on_host_machine}例如:
docker cp my-aspnet-app-container:/app/[1]-dotnet.2023-03-24T16-10-18.136.dmw "/home/username/Documents/Workspaces"
最后修改日期: 2025年 9月 27日