4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#サーバーでプロファイルを取る方法

Posted at

はじめに

ここでいうプロファイルとは、CPU使用時間やメモリ使用量などの計測結果のことを指します。

この記事の目的はdotnet-traceの紹介です。
最新の情報は公式ドキュメントをご参照ください。

プロファイルを取る手順

ツールのインストール

多くの場合はDockerイメージを使用していると思います。
そんな時は以下のような手順でdotnet-traceをインストールするとよいでしょう。
また、必要に応じてPATHに設定してもよいかもしれません。

# ツールをtoolsという名前のイメージの`/tools`にインストールする
FROM mcr.microsoft.com/dotnet/sdk:{バージョン} AS tools
RUN dotnet tool install --tool-path /tools dotnet-trace

# 最終イメージの記述
FROM mcr.microsoft.com/dotnet/aspnet:{バージョン} AS final
...
# toolsイメージからインストールしたツールを最終イメージの`/tools`へコピーしてくる
WORKDIR /tools
COPY --from=tools /tools .

参考 : マルチステージビルドの利用

書き込み先の用意

書き込み権限のある領域を作成しておきます。
単なるDockerイメージの場合は不要かもしれません。(未確認)

  • kubernetesの場合
          volumeMounts:
            - mountPath: /tmp
              name: tmp
    ...
      volumes:
        - name: tmp
          emptyDir: {}
    
  • docker-composeの場合
        tmpfs:
          - /tmp
    

実行

起動と同時にプロファイルを取る場合

初めからプロファイルを取る目的で起動する場合はENTRYPOINTあたりでdotnet-traceを指定してあげると良さそうです。(未確認)

# 動作未確認
ENTRYPOINT ["/tools/dotnet-trace", "collect", "--", "dotnet", "exec", "DLL名"]

起動しているプロセスからプロファイルを取る場合

多くの場合は既に起動しているプロセスからプロファイルを取りたいと思います。(主観)
その場合は以下のように指定することでプロファイルを取ることができます。

# processIDを取得する
$ /tools/dotnet-trace ps
 20  dotnet  /usr/share/dotnet/dotnet  dotnet {DLL名}

# プロファイルを取る
# /tmpは上で作成した書き込み用ボリュームを、profile.nettraceには好きな名前を指定できます。
$ /tools/dotnet-trace collect -p 20 -o /tmp/profile.nettrace
...(出力内容省略)...
Press <Enter> or <Ctrl+C> to exit

--durationなど、オプションについては公式ドキュメントをご確認ください。

コンテナからプロファイルファイルを取得する

  • kubernetesの場合
  • docker-composeの場合
    • docker compose cpでできるらしいです。(未確認)
      • 手元で試したところError: No such container:path: f09c185d91f7:/tmp/profile.nettraceと言われて詰まったorz

プロファイルの内容を精査

VisualStudioにファイルをドラッグ&ドロップすればプロファイルの内容が確認できます。
image.png

まとめ

最適化はちゃんとプロファイル取ってからやりましょう!

Rules of Optimization:
Rule 1: Don't do it.
Rule 2 (for experts only): Don't do it yet.
> Michael A. Jackson. Principles of Program Design, Academic Press, 1975

Tips

  • dotnet-traceは常に入れておくと急遽必要になった時に焦らないのでお勧め。
    • セキュリティの関係でdotnet installができないことも多いのであらかじめ仕込んでおくの大事。
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?