パフォーマンスモニター(PerfMon)は、特定のプロセスのパフォーマンスメトリックをグラフ化およびログに記録できるWindows監視ツールです。このツールを独自のテストケースと組み合わせて使用して、メモリの増加を引き起こしているシステム内のコンポーネントを特定します。タスクマネージャーとは異なり、パフォーマンスモニターは定期的にメモリ使用量を測定します。これは、メモリの増加が明らかになる前にテストシステムを長期間実行する必要がある場合に役立ちます。
このチュートリアルでは、パフォーマンスモニターを使用して、TestStandプロセスのメモリ使用量を測定し、この情報をグラフに表示し、データをログファイルに保存する方法を示します。
- スタートメニューからパフォーマンスモニターを起動します。
- メモリ使用量のグラフを表示するには、構成ツリーでパフォーマンスモニターをクリックします。
パフォーマンスモニターは、カウンターの値をグラフ化して情報を表示します。カウンタは、メモリ使用量とシステムパフォーマンスのさまざまな側面を表します。パフォーマンスモニターのグラフに表示されるカウンターのセットを構成できます。
- [パフォーマンスモニター]ウィンドウの下部にあるテーブルで、既存のカウンターを選択します。
- キーボードのDeleteキーを押して、これらのカウンターをグラフ表示から削除します。
- グラフ領域を右クリックします。 [カウンターの追加...]をクリックします
[
カウンターの
追加]ダイアログボックスが表示されます。グループごとに分類された、利用可能なすべてのカウンターを含むスクロール可能なリストボックスがあります。
6.関心のあるグループを見つけて展開し、カウンターを選択します。
メモリの増加の問題については、
プライベートバイト、ハンドルカウント、スレッドカウント、すべてのヒープの#Bytes 、および
Gen2ヒープサイズカウンターを有効にすると便利なことがよくあります。これらのメトリックはすべて、アプリケーションによって現在使用されているリソースのスナップショットです。次の表で、各カウンターの意味を説明します。
注:表に含まれていないその他のカウンターについては、「説明の
表示」を有効にして、カウンターの
説明を表示します。
グループ | カウンター | 説明 |
---|
処理する | プライベートバイト | プロセスによって使用されているプライベートメモリの量。プロセスの仮想メモリ空間は、プロセスのみがアクセスできるプライベートメモリと、他のプロセスがアクセスできる共有メモリで構成されます。 |
処理する | ハンドル数 | プロセスのオブジェクトテーブル内のオブジェクトハンドルの数。計測器ドライバセッションへの参照の維持、LabVIEW VIのロード、およびその他の多くの操作により、ハンドルの数が増える可能性があります。 |
処理する | スレッド数 | プロセスで実行されているスレッドの数。 |
.NETCLRメモリ | #すべてのヒープのバイト数 | .NETオブジェクトを格納するためにプロセスによって使用されているメモリの合計量。 |
.NETCLRメモリ | 第2世代のヒープサイズ | .NETオブジェクトをGen2ヒープに格納するためにプロセスによって使用されているメモリの量。 Gen 2ヒープは、長期間メモリ内にあるオブジェクトが格納される.NETメモリの領域です。この値は、.NETオブジェクトが不要になったときに解放されていないことを示している可能性があります。 |
- 選択したオブジェクトのインスタンスリストで目的のプロセスを選択します。
TestStandシステムの場合、これは通常、TestStandシーケンスエディターまたはユーザーインターフェイスのどちらでテストシステムを実行しているかに応じて、
SeqEditまたは実行可能ユーザーインターフェイスの名前です。
LabVIEWアプリケーションの場合、
LabVIEWを選択します。
- [追加]ボタンをクリックして、[追加されたカウンター]リストにカウンターを追加します。
- [追加されたカウンター]リストに必要なすべてのカウンターが表示されるまで、手順6〜8を繰り返します。
- [カウンターの追加]ダイアログで[ OK ]をクリックします。パフォーマンスモニターのグラフは、新しく追加されたカウンターの値で更新を開始します。
パフォーマンスモニターグラフの構成
グラフの設定を調整して、すべてのカウンター値がグラフ表示用に適切にスケーリングされ、メモリ使用量が増加しているかどうかを判断するのに十分な期間のデータがグラフに表示されるようにする必要があります。システムが実行されます。
- Ctrl + Shift + Aを押して、ウィンドウ下部のテーブルに表示されているすべてのカウンターを選択します。
- 右クリックして、 「選択したカウンターのスケール」を選択します。これにより、各カウンターの値がスケーリングされ、カウンターがグラフウィンドウに表示されます。
- グラフを右クリックして、[プロパティ... ]を選択します。 [パフォーマンスモニターのプロパティ]ダイアログボックスが表示されます。
- [全般]タブで、[すべてのサンプル]の値と[期間]の値を設定して、グラフに長期間にわたるメモリの増加が表示されるようにします。
たとえば、
Sample every値を10に、
Duration値を10000に設定して、10秒ごとに新しい値をグラフ化し、グラフウィンドウに合計約2.5時間の情報を表示できます。
- [ OK]をクリックします。
- グラフ領域を右クリックして、[クリア]を選択します。これにより、テストケースを実行する前に、既存のグラフデータがすべて削除されます。
- テストケースを実行します。パフォーマンスモニターのグラフを調べて、テストシステムの実行中にカウンター値のいずれかが増加しているかどうかを判断します。
メモリデータをファイルに記録する
- 構成ツリーからパフォーマンスモニターを右クリックします。新規→データコレクターセットを選択します。
- データセットの名前を入力します。 [次へ]を押します。
- ログファイルを保存する場所を選択します。 [次へ]をクリックします。
- [保存して閉じる]を選択します。 [完了]をクリックします。
新しいデータコレクターセットは、構成ツリーの
[データコレクターセット] >> [ユーザー定義]の下に表示され
ます。
パフォーマンスデータのログ記録を開始する場合は、データコレクターセットを右クリックして、[
開始]を選択します。ロギングを停止するには、右クリックして[
停止]を選択します。
例
これは、テストケースを実行した後のパフォーマンスモニターグラフの例です。
プライベートバイトカウンター(青い線)は一定の速度で増加しますが、
すべてのヒープおよび
第2世代ヒープサイズカウンターの
#バイトは増加しません。これは、シーケンスエディタプロセスのメモリスペースが時間の経過とともに増大していることを示しており、メモリリークが発生する可能性があることを示しています。
すべてのヒープおよび
第2世代ヒープサイズカウンターの
#バイトは時間の経過とともに増加しないため、メモリの増加は.NETメモリが原因であるとは思われません。これらのカウンターが増加している場合、これは、プロセスが.NET参照を開き続けており、不要になった参照を閉じていないことを示します。
Gen 2ヒープサイズと.NETガベージコレクションの重要性の詳細については、「
外部:ガベージコレクションの基礎」を参照してください。