dotMemory 2019.1ヘルプ

dotMemoryコマンドラインプロファイラの使用

場合によっては、メモリスナップショットを収集するプロセスを自動化する必要があります。例:プロファイリングを継続的な統合ビルドの一部にしたい場合(例:統合テストのプロファイリングを実行するビルドステップ)、プロファイリングルーチンを高速化したい場合(たとえば、同じアプリケーションで、毎回dotMemoryユーザーインターフェースを起動したくない場合)。この目的のために、dotMemoryはdotMemory.exeコマンドラインツール(英語)を提供します。

dotMemory.exe ツールを使用して、.NETアプリケーション(すでに実行中のものも含む)のプロファイルを作成し、メモリのスナップショットをとることができます。

このツールは無料で配布されるため、dotMemoryをインストールする必要はありません。任意のコンピューターに自由にアップロードして、問題のあるアプリケーションのメモリスナップショットを取得できます。

4つの主な dotMemory.exe コマンドがあります。

  • get-snapshot - 実行中のアプリのスナップショットを即座に取得します。

  • attach - プロファイラを実行中のアプリケーションに接続し、条件を使用して、APIを使用して、またはstdinにコマンドを送信してスナップショットを取得します。

  • start - アプリを起動し、条件を使用して、APIを使用して、またはstdinにコマンドを送信してスナップショットを取得します。

  • start-iis - IISを起動し、条件を使用して、APIを使用して、またはstdinにコマンドを送信してスナップショットを取得します。

特定の dotMemory.exe コマンドの詳細については、次のコマンドを実行してください。
dotMemory.exe help <command>

このセクションでは、最も基本的なツールの使用シナリオについてのみ説明します。

実行中のアプリケーションのスナップショットを取得する

最もシンプルで必要なシナリオです。スナップショットを取得するアプリケーションを識別するには、PIDまたは名前を使用する2つの方法があります。

実行中のアプリケーションのスナップショットをPID(例:6844)で即座に取得するには:

  • コマンドを実行:

    dotMemory.exe get-snapshot 6844 --save-to-dir=C:\Snapshots

ここに:

  • --save-to-dir=C:\Snapshots - (オプション)スナップショットを保存するためのディレクトリーへのパス(より正確には、ワークスペース(.dmwファイル))。この場合、スナップショットファイル名は自動的に生成されます。自分でファイル名を指定したい場合は、--save-to-file オプションを使用してください。

  • 6844 - プロセスPID(ウィンドウタスクマネージャーでそれを見つけることができます)。

実行中のアプリケーションのスナップショットをその名前で即座に取得するには

  • コマンドを実行:

    dotMemory.exe get-snapshot MyApp --with-max-mem
    または
    dotMemory.exe get-snapshot MyApp --all

ここに:

  • MyApp - プロセス名(Windowsのタスクマネージャーで見つけることができます)。そのような名前のプロセスが複数ある場合は、--with-max-mem または --all オプションを使用してあいまいさを解消できます。

  • --with-max-mem - ほとんどのメモリを消費するプロセスがプロファイルされます。

  • --all - 指定された名前のすべてのプロセスがプロファイルされます。dotMemoryはすべてのプロセスのスナップショットをとります(プロセスごとのスナップショット)。

アプリケーションの起動と条件によるスナップショットの取得

長い時間間隔の間にアプリケーションのメモリ消費を追跡する必要があることがあります。この場合、特定の条件が満たされた場合にのみプロファイリングでアプリケーションを起動し、スナップショットを取得することができます。定期的な時間間隔が終了するか、またはメモリ消費量が指定された値だけ増加します。

MyApp.exeを起動してスナップショットを定期的に取得するには

  • コマンドを実行:

    dotMemory.exe start --trigger-timer=30s C:\MyApp\MyApp.exe MyAppArg1

ここに:

  • --trigger-timer=30s - スナップショットを撮るための期間(この場合は30秒)。

  • C:\MyApp\MyApp.exe - プロファイルアプリケーションの実行可能ファイルへのパス。

  • MyAppArg1 - MyApp.exeの(オプションの)引数。アプリケーション引数がダッシュ(-)文字)で始まる場合は、二重ダッシュ(--). ex:を使用してそれをエスケープすることができます。

    dotMemory.exe start --trigger-timer=30s C:\MyApp\MyApp.exe -- -MyAppArg1

メモリ消費が指定された値だけ増加すると、MyApp.exeを起動してスナップショットを取得する

  • コマンドを実行:

    dotMemory.exe start --trigger-mem-inc=50% --trigger-delay=5s C:\MyApp\MyApp.exe

ここに:

  • --trigger-mem-inc=50% - スナップショットは、MyAppのメモリ消費量が50%増加したときにのみ取得されます。

  • --trigger-delay=5s - アプリケーションの起動フェーズをスキップするために、5秒の間にトリガーが有効になります。

アプリケーションの起動とstdinメッセージを使用したスナップショットの取得

プロファイリングプロセスを直接制御する必要がある場合があります。たとえば、ある時点で直接コマンドでスナップショットを取得するなどです。これは、特別なメッセージをdotMemory.exeのstdinに送信することによって行うことができます。

MyApp.exeを起動し、stdinメッセージを使用してプロファイリングを制御するには

  1. 追加の引数は必要ありません。 startstart-iis、または attach コマンドを使用して、通常どおりプロファイリングを開始できます。たとえば:
    dotMemory.exe start c:\MyApp\MyApp.exe

    dotMemoryは、特別なサービスメッセージを標準出力に送信することによって、プロファイリングプロセスがどのように進行しているかをユーザーに知らせることができます。これは、外部スクリプトによってプロファイリングを制御する場合に特に役立ちます。標準出力メッセージのサポートを有効にするには、--service-output オプションを指定してdotMemoryを実行します。

    dotMemory.exe start --service-output c:\MyApp\MyApp.exe
    dotMemoryは次のメッセージをstdoutに送信します。
    • プロファイリングセッションの開始

      ##dotMemory["connected", {pid: 1234}]

    • スナップショットを保存する

      ##dotMemory["workspace-saved", {path: "..."}]

  2. stdinに次のコマンドを送信してスナップショットを取得します。

    ##dotMemory["get-snapshot", {pid:1234}]
    pid が指定されている場合、dotMemoryは指定されたPIDを持つプロセスのスナップショットを取得します。それ以外の場合、dotMemoryはすべてのプロファイルされたプロセスのスナップショットを取得します。

  3. プロファイリングを停止し、プロファイルされたアプリケーションを終了するには、次のコマンドをstdinに送信します。

    ##dotMemory["disconnect"]
    startstart-iis、または attach コマンドで開始されたすべてのプロファイリングセッションで動作します。

アプリケーションの起動とAPIを使用したスナップショットの取得

また、APIを使用してプロファイリングを制御する(スナップショットの取得、プロセスからの切り離しなど)オプションもあります。

MyApp.exeを起動し、APIを使用してプロファイリングを制御するには

  • コマンドを実行:

    dotMemory.exe start --use-api C:\MyApp\MyApp.exe

実行中のアプリケーションへのアタッチとプロファイリング

すでに実行中のアプリケーションをプロファイリングし、get-snapshotシナリオとは異なり、プロファイリングプロセスを完全に制御したい場合は、attach コマンドを使用する必要があります。プロファイラは実行中のプロセス(PIDまたは名前、get-snapshot)にアタッチし、トリガ、標準入力、またはAPIを使用してスナップショットを取得できます。たとえば、実行中のアプリケーションMyApp.exeをプロファイリングし、トリガーを使用してスナップショットを取得する方法の例を次に示します。

実行中のアプリケーションにアタッチして定期的にスナップショットを取得するには

  • コマンドを実行:

    dotMemory attach MyApp.exe --trigger-timer=30s

iis-hosted Webアプリケーションの実行とプロファイリング

IISサーバー上で実行されるASP.NET Webアプリケーションをプロファイルする場合は、start-iis コマンドを使用する必要があります。このコマンドを実行すると、IISはプロファイリングで起動されます(IISでホストされるアプリケーションのプロファイル方法の詳細については、IISサーバー上のプロファイルWebアプリケーションを参照してください)。 start-iis は、start コマンドと同じようにプロファイリングを制御する方法をサポートしています(トリガー、標準入力、APIの使用)。たとえば、Webアプリケーションのプロファイルを作成し、トリガーを使用してスナップショットを取得する方法の例を次に示します。

プロファイリングでIISを実行し、定期的にスナップショットを取得するには

  • コマンドを実行:

    dotMemory.exe start-iis --trigger-timer=30s --open-url=localhost/myapp --use-browser=Chrome

ここに:

  • --open-url=localhost/myapp - プロファイリングを実行した後に開くプロファイリングされたアプリケーションのURL。

  • --use-browser=Chrome - URLを開くために使用するブラウザ。指定しない場合は、デフォルトのシステムブラウザが使用されます。

最終更新日: 2019年5月31日