Docker コンテナー内のプロファイルアプリケーション
.NET アプリケーションが Docker コンテナー内で実行されている場合、dotTrace コマンドラインプロファイラーを使用してプロファイリングします。 プロファイラーをダウンロードしてプロファイリングセッションを開始するには、コンテナーシェルにアクセスできる必要があります。
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コンテナー内で、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 ベースのシステム用のパッケージマネージャーです。 OS が他のパッケージマネージャーを使用している場合は、aptの代わりにそれを使用します。JetBrains.dotTrace.CommandLineTools.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でプロセスにアタッチし、stdin メッセージを使用してスナップショットを取得するには:./dotTrace/tools/dottrace attach 1 --service-input=stdinスナップショットを取得するには、次を送信します。
##dotTrace["get-snapshot"]コマンドラインツールの使用方法の詳細については、対応する トピックを参照してください。
プロファイリングを停止して収集したデータを保存するには、 Ctrl+C を押します。
コンテナーでシェルセッションを終了するには、
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