在 Docker 容器中分析应用程序
要分析运行在 Docker 容器中的 .NET 应用程序,请使用 dotTrace 命令行分析器。 要下载分析器并开始分析会话,您需要能够访问容器的 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在容器中,下载并解压 dotTrace 命令行工具,例如到
dotTrace文件夹:apt-get update -y && apt-get install -y wget && \ wget -O dotTraceclt.zip https://www.nuget.org/api/v2/package/JetBrains.dotTrace.CommandLineTools.linux-x64 && \ apt-get install -y unzip && \ unzip dotTraceclt.zip -d ./dotTrace && \ chmod +x -R dotTrace/*这里:
apt是基于 Debian 系统的包管理器。 如果您的操作系统使用其他包管理器,请使用它代替apt。JetBrains.dotTrace.CommandLineTools.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的进程并使用 stdin 消息获取快照:./dotTrace/tools/dottrace attach 1 --service-input=stdin要获取快照,请发送:
##dotTrace["get-snapshot"]有关使用命令行工具的更多信息,请参阅相应的 主题。
要停止分析并保存收集的数据,请按 Ctrl+C 。
要结束容器中的 shell 会话,请运行
exit。将快照文件复制到主机。 请注意,dotTrace 将快照保存为多个文件,例如,
somename.dtp、somename.dtp.0000、somename.dtp.0001等。 因此,您应首先将它们放入容器中的一个归档文件中。 在主机上:创建一个归档文件:
docker exec my-aspnet-app-container sh -c "tar -czf /tmp/snapshot.tar.gz /app/somename.dtp*"将归档文件复制到主机:
docker cp my-aspnet-app-container:/tmp/snapshot.tar.gz /home/username/Snapshots/snapshot.tar.gz解压归档文件:
tar -xzf /home/username/Snapshots/snapshot.tar.gz -C /home/username/Snapshots