演習 1 - 大規模なワーキング セットを含むプロセスを特定する
データの分析に使用される手法には、いくつかの方法があり、調査が開始された状況によって異なります。 この演習では、さまざまな列の配置で表示される各種のビューについて説明し、いくつかの方法を示します。
常駐セットと呼ばれるデータは、現在、物理メモリ (RAM) に存在するページのセットです。 この常駐セットは、Windows パフォーマンス レコーダー (WPR) または Assessment Toolkit メモリ評価を使用してトレース キャプチャが終了した時点での現在のメモリ状態のスナップショットです。 1 つのトレースで複数のスナップショットを収集することはできません。
常駐セットには、システム上のメモリ コンポジションの全体的かつ瞬間的なスナップショットが含まれています。 通常、常駐セット分析の調査は、次の理由で行われます。
特に物理メモリの使用量が予想よりも高い場合に、物理メモリの使用量を把握するため。
特にプロセスのプライベート ワーキング セットが予想よりも大きい場合に、プロセスのプライベート ワーキング セットのソースを把握するため。
ページング アクティビティによるシステムの応答性の問題が生じたため。
手順 1: Assessment Toolkit を使用してデータを収集する
Windows Assessment Toolkit には、起動後のメモリ フットプリントを測定するためのテストが含まれています。 メモリ フットプリントの評価結果を使用して、イメージ ソフトウェア プリロードのベースラインを収集できます。 多くのプロセスとサービスが常時使用され、メモリを消費します。 この評価は、(常に実行される) ドライバーとアプリケーションがブート プロセスに与える影響を確認するのに役立ちます。
[スタート] メニューから Windows Assessment Console (WAC) を開きます。
[オプション] メニューを開き、[新しいジョブ…] を選択します。
ジョブ名として「 MemoryTest」と入力します。
[カスタム ジョブの作成] を選択します。
[評価の追加] をクリックします。
- [+] 記号をクリックして、[メモリ フットプリント] 評価を追加します。
新たに追加された [メモリ フットプリント] 評価をクリックし、テスト構成を入力します。
[推奨設定を使用する] を選択解除し、構成として [クイック実行] を選択します。
- [クイック実行] を使用すると、データの精度は下がりますが、テストを短時間で完了できます。
[クイック実行] を選択すると、次の 2 つのオプションを使用できるようになります。
すべてのテストリソースを含むフォルダーを作成し、別のテストシステムにコピーするために、ジョブをパッケージ化します (このオプションを選択するには、右下隅にある[パッケージ…] ボタンをクリックします)。
システムでジョブを直接実行します (このオプションを選択するには、右下隅にある[実行] ボタンをクリックします)。
これにより、システムが再起動され、トレースが収集されます。
このテストは、完了するまでに15-20 分かかることがあります。
[実行] オプションが必要です。
手順 2: WAC を使用してメモリ フットプリントの評価結果を視覚化する
評価が完了したら、システムのメモリ使用量の概要が含まれた結果 XML ファイルを開くことができます。
手順 2.1: メモリ レポートを開く
WAC で [オプション] メニューを開き、[結果を開く…] を選択します。
- キーボードの CTRL+R を使用することもできます。
[参照…] ボタンをクリックします。
手順 1 で作成した評価を保存したフォルダーに移動します。
手順 1 で作成した評価を開きます。
このレポートには、メモリ フットプリント全体に影響を及ぼしているドライバーとプロセスを把握するのに役立つさまざまなカテゴリが含まれています。
次のようなレポートが表示されます。
少し時間を取って、[ドライバー] と [プライベート ページの処理] カテゴリを調べてください。
前の例では、1487 MB のメモリが 4 GB の物理 RAM によって使用されています。
使用中のメモリ = プロセス ワーキング セット + 非ページ メモリ + 変更されたページ
使用可能なメモリ = スタンバイ メモリ + 空きメモリ
前の例では、メモリを最も多く使用しているものは、非ページの場合は 267 MB、プロセス プライベート ページ (プライベート ワーキング セット) の場合は 613 MB のドライバー割り当てです。
このメトリックの詳細については、MSDN の「メモリ占有領域の評価の結果」トピックを参照してください。
手順 2.2: ドライバーの非ページ割り当てを確認する
このメトリックは、ページアウトできない物理メモリを使用する割り当てを除いて、ページングされた割り当てと同様です。これは固定された物理メモリを反映しているため、ページングされたメモリまたは他のプロセスやサービスでは使用できません。 ページングされていないメモリが多すぎると、バックアップ メモリで使用できるメモリの量が減ります。
左側の矢印をクリックし、[ドライバーの非ページ割り当て] カテゴリを展開します。
[DriverLockedSystemPages] カテゴリを展開します。
- これは、ページングされたメモリから読み込まれたメモリであり、不要になるまでドライバーによってロックされます。
メモリ使用量が最大のドライバーを特定します。
メモリ要件が少ないハードウェアまたはソフトウェア ドライバーをスワップすることによって、このメトリックに影響を与えることができます。
ドライバー ベンダーは、ドライバーの設計方法によって、このメトリックに対して最も大きな影響を与えます。 WAC に表示される結果から、メモリの割り当てが大きいものを確認します。 さらに、ドライバー ベンダーは、この評価のパフォーマンス トレース (評価結果と同じディレクトリに格納され、WPA で分析できる) を指定して、メモリ使用量の削減に関する調査の対象となり得るメモリ割り当ての負荷の高い領域を探ることができます。
手順 2.3: プロセス プライベート ワーキング セットを確認する
メモリ フットプリント全体について使用量が最も多いものは、ユーザーが把握していなくても常にバックグラウンドで実行されている可能性があるアプリです。 プロセスで使用されるメモリの量を表示するには、レポートの [プライベート ページの処理] カテゴリを使用します。
左側の矢印をクリックして、[プライベート ページの処理] カテゴリを展開します。
[アクティブ] カテゴリを展開します。 一覧に、バイナリとアクティブ メモリの使用量が表示されます。
次のように表示されます。
最も多くのメモリを使用するプロセスを特定します。
Run レジストリ キーまたは Startup フォルダー内のアプリケーションである「常に実行されている」アプリケーションの数を減らすことで、このメトリックに影響を与えることができます。 追加されたアプリの影響を分析します。
ドライバー ベンダーとソフトウェア ベンダーは、コードの設計方法によって、このメトリックに対して最も大きな影響を及ぼします。 WAC に表示される結果から、メモリの割り当てが大きいものを確認します。 さらに、ソフトウェア ベンダーは、この評価のパフォーマンス トレース (評価結果と同じディレクトリに格納されている) を指定して、メモリ使用量の削減に関する調査の対象となり得るメモリ割り当ての負荷の高い領域を探ることができます。 割り当てを注意深く分析することで、小さな割り当てであっても、追加する割り当てを見つけるのに役立ちます。
手順 3: WPR を使用して常駐セットデータを収集する
手順 1 と 2 で、Assessment Toolkit メモリ フットプリント評価を使用して、メモリ トレースを収集する方法を学習しました。 この評価では、ブート シナリオのトレースのみをキャプチャできます。 Windows パフォーマンス レコーダー (WPR) を使用して、任意のシナリオ (アプリの起動、Web 閲覧など) のトレースをキャプチャできます
次の手順に従って、常駐セット データを含むトレースを収集します。
[スタート] メニューから Windows Performance Recorderを開きます。
[最初のレベルのトリアージ] と [常駐セットの分析] 記録プロファイルを選択しますが、その他のオプションについては既定値をそのまま使用します。
[開始] をクリックして、数秒待ちます。
[保存] をクリックし、ETL トレースをディスクに保存します。
これで、システム メモリ コンポジションのスナップショットが作成されました。
手順 4: WPA を使用して常駐セット データを解釈する
次の手順に従います。
[スタート] メニューから Windows Performance Analyzer を開きます。
収集したばかりの ETL トレースを開きます ([ファイル] メニューから [開く…] を選択)。
グラフ エクスプローラーで、[メモリ] セットを展開します。
[常駐セット] グラフを [分析] タブまでドラッグ アンド ドロップします。
次のように表示されます。
データがどのように表示されるかを確認します。 最上位レベルの分析を実行するために最も役に立つ列の定義を次に示します。
列 | 定義 |
---|---|
MMList | ページを含むメモリ管理の一覧。
|
Process | ページの所有者であるプロセスの名前。 この情報は、プロセスのプライベート ページでのみ使用できます。 共有されていない場合でも、すべての共有可能なページは「不明」 (-1) のプロセスに関連付けられます。 |
説明 | 表示される値は、ページ カテゴリによって異なります。 次に例を示します。
|
ページ カテゴリ | 次に定義されているような、ページ内に含まれるデータの型。 次のカテゴリが考えられます。
|
[サイズ (MB)] | 各カテゴリで集計されたページの合計サイズ。 |
手順 6: メモリ フットプリントに影響するプロセスのワーキング セットを特定する
常駐セットのデータは、概要テーブルの列の配置に基づいて、さまざまな方法で表示できます。 概要テーブルには、調査の開始点として使用できる定義済みの列の配置がいくつかあります。
[プライベート ワーキング セットの処理] プリセットを選択します。
アクティブな MMList グループを展開します。
メモリ使用量に現在影響を及ぼしている [アクティブ] カテゴリーに焦点を当てます。
[スタンバイ] ページはメモリ不足により解放される可能性があります。
[変更済み] ページはディスクに書き込まれて、解放される可能性があります。
[サイズ (MB)] 列ヘッダーをクリックして、サイズを基準に並べ替えます。
使用率が最も高いプロセスを特定します。 プロセス名として、[N/A] および [Unknown (-1)] が表示される場合があります。
[N/A] には、ドライバー プール メモリなどのプロセスに関連付けられていないページが含まれています。
[Unknown (-1)] には、共有可能なページが含まれています。
プロセスを展開して、[ページ カテゴリ] を確認します。
以下の図に、プロセスのワーキング セットの構成が表示されています。
上位のカテゴリは VirtualAlloc または Win32Heap であり、これらは演習 2 で分析します。
以下の例では、SearchIndexer.exe が 21.7 MB のアクティブ メモリをヒープ割り当てを介して使用し、12.4 MB を VirtualAlloc API 呼び出しを介して使用しています。
サード パーティのプロセスに焦点を合わせ、プリロードされたソフトウェアの一部としてブート時に起動する必要があるかどうかを判断します。 開発者は、最適化を行うことができる場所を理解するために、プロセスが行う動的な割り当てを分析する必要があります。