Docker コンテナー内のプロファイルアプリケーション
.NET アプリケーションが Docker コンテナー内で実行されている場合、dotMemory コマンドラインプロファイラーを使用してプロファイリングします。 プロファイラーをダウンロードしてプロファイリングセッションを開始するには、コンテナーシェルにアクセスできる必要があります。
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 コンテナー内でシェルセッションを開始します。
shや/bin/bashなど、イメージ OS に応じて異なるコマンドラインインタープリターを使用できます。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 ベースのシステム用のパッケージマネージャーです。 OS が他のパッケージマネージャーを使用している場合は、aptの代わりにそれを使用します。JetBrains.dotMemory.Console.linux-x64は、Linux x64 システムのパッケージ名です。 この名前は、ターゲットプラットフォームによって異なります。 ここ で、さまざまなプラットフォーム向けのパッケージ一覧を確認できます。
プロファイリングするプロセスにアタッチする前に、プロセス ID を取得する必要があります。
ps auxLinux ディストリビューションで
psコマンドが利用できない場合は、次のようにインストールします。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 1PID
1のプロセスにアタッチするには:./dotMemoryclt/tools/dotmemory attach 1スナップショットを取得するには、stdin メッセージを使用します:
##dotMemory["get-snapshot"]
コマンドラインツールの使用方法の詳細については、対応する トピックを参照してください。
プロファイリングを停止して収集したデータを保存するには、 Ctrl+C を押します。
コンテナーでシェルセッションを終了するには、
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"