1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

Windows上でCPUの負荷状態を調べためのいくつかの方法

ASCII.jp / 2023年12月3日 10時0分

 Windowsの反応が悪いときなど、CPUの負荷状態を知りたくなることがある。一番簡単な方法としては、タスクマージャーを使うのがいいだろう。タスクマネージャーのパフォーマンスタブにあるCPUを見ると、プロセッサの使用率が表示されている。これが現在のCPUの負荷状態を表している。

Windows上でCPUの負荷状態を調べためのいくつかの方法
タスクマネージャーのパフォーマンスタブでCPUを選択したとき、グラフの下に出る「使用率」がCPUの負荷状態を表す。これは、パフォーマンスカウンターの「Processor Information」カウンターセットにある、「% Processor Utility」カウンターの「_Total」インスタンスに相当する

 Windowsでは、CPUはスレッドをQuantumと呼ばれる短い時間で実行しては、別のスレッドに切り替えて実行するという処理を繰り返す。実行すべきスレッドがなければ、アイドルプロセスを実行する。アイドルプロセスとは、基本的には何もしない擬似的なプロセスである。一定時間内のアイドルプロセスと非アイドルプロセスの実行時間の比率が「使用率」である。

パフォーマンスカウンターで見る

 CPU負荷のようなWindows内部の情報は、「パフォーマンスカウンター」として扱えるようになっている。このパフォーマンスカウンターはWindowsのシステム状態を表すもので、APIを介して取得できる。タスクマネージャーやパフォーマンスモニター、あるいはtypeperf.exeといったシステム情報を扱うプログラムは、すべてパフォーマンスカウンターから情報を得ている。

 パフォーマンスカウンターでは、CPU負荷率のような単一の項目を「カウンター」と呼ぶ。カウンターには必ず名前があって、測定項目を表す。

 複数のカウンターを対象や目的などによりグループ化したものを「カウンターセット」と呼ぶ。前記のCPU負荷率は、「Processor Information」というカウンターセットに属している。ただし、異なるカウンターセットに同じ名前を持つカウンターが属していることがある。しかし、それぞれは異なるものとして扱われる。

 カウンターセットに「Processor」と「Processor Information」があるが、後者はWindows 7/Windows Server 2008R2で高精度な測定をするために新設されたカウンターで、前者はそれ以前からあるものだ。「Processor」は、64コア以上に対応しないなどの制限がある。こうしたカウンターセットは、パフォーマンスカウンター・プロバイダーと呼ばれるプログラム(DLL)が情報を提供している。

 また、カウンターには「インスタンス」がある。たとえば、CPU負荷率(\Processor Information\ % Processor Utility)というカウンターには、CPUコアごとに「インスタンス」があり、インスタンスは具体的なカウンター値を持つ。

システム負荷を調べるためのGUIアプリケーション

 CPUの負荷状態を見るためのプログラムには、「パフォーマンスモニター」や「リソースモニター」などのGUIプログラムもある。特にパフォーマンスモニターは、パフォーマンスカウンターを表示・記録するためのツールとして作られたもの。グラフ表示ができるため、現在の状態を「可視化」することが可能だ。古くからあるツールなので、使い方をご存じのユーザーも多いとは思うが、あらためてポイントを押さえておく。

 毎回、同じカウンタをグラフ表示させたい場合、設定を保存したくなるが、パフォーマンスモニター内からはできない。パフォーマンスモニターなどWindowsの管理ツールは、Windows管理コンソールというプログラムに「スナップイン」が登録されたもので、それを記録したのがmscファイル。毎回同じグラフを表示させるには、このmscファイルを作成する必要がある。

 パフォーマンスモニターのグラフ項目を追加するとき、PATH環境変数に「C:\Windows\System32\WBEM」フォルダが登録してあるとエラーになるため、最初にこれを削除する。作業は、「設定」→「システム」→「バージョン情報」→「関連リンク」→「システムの詳細設定」→「環境変数」でする。

 次にWindows管理コンソール(C:\Windows\System32\mmc.exe)を起動し、ファイルメニューにある「スナップインの追加と削除」を選択。「パフォーマンスモニター」を追加する。あとは、グラフ項目を追加し、必要な設定やウィンドウサイズや表示形式を選択して、ファイルメニューから「名前を指定して保存」を選び、適当なフォルダにmscファイルを保存する。以後は、このmscファイルを実行させれば、毎回同じグラフを表示できる。

 また、パフォーマンスモニターは、カウンタやカウンタセット、インスタンスなどをグラフの項目追加ダイアログの中で表示できる。「説明」も日本語化されている。

Windows上でCPUの負荷状態を調べためのいくつかの方法
パフォーマンスモニターのカウンタ追加ダイアログ(グラフ上のツールバーからプラス記号のボタン)では、すべてのカウンターをカウンターセットごとに表示できる。日本語版Windowsでは、ここで日本語化された説明を見ることも可能

コマンドラインから確認する方法

 スクリプトを作る、あるいは簡易に現在の状態を知りたいなどの場合には、コマンドラインからもパフォーマンスカウンターを扱うことができる。その1つはtypeperf.exeコマンドだ(https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/typeperf)。typeperf.exeでは、間隔や計測時間を指定して結果をCSVファイルなどに保存することができる。以下のコマンドで、CPU負荷率を1秒ごとに表示する。

typeperf.exe "\Processor Information(_Total)\% Processor Utility"

 このコマンド例では、「\Processor Information」がカウンターセット名であり、カッコの中の「_Total」がインスタンス(これはCPU全体の平均値。特定のコアは0から始まる数値で指定)、「% Processor Utility」がカウンター名である。

 また「-q [カウンターセット名]」オプションで指定可能なカウンターのリストを、「-qx [カウンターセット名]」で、インスタンスのリストを表示させることができる。

 PowerShellから、パフォーマンスカウンターを使うには、get-counterコマンド(https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.diagnostics/get-counter?view=powershell-7.4)を使う。PowerShell 7.x以降では、実行に管理者権限が必要となるが、Windowsに同梱されているWindows PowerShell 5.1では不要だ。

 こちらも、typeperf.exeと同じく、サンプリング間隔やサンプリング数を指定して連続計測ができる。ただし、何もオプションを指定しないと1回のみの測定になる。カウンターの指定方法法は、typeperf.exeと同じ。カウンターやインスタンスのリストなどは、「-ListSet [カウンターセット名]」を使ってGet-Counterコマンドを実行し、「Counter」プロパティ(カウンタのリスト)、「PathsWithInstances」プロパティ(インスタンス一覧)から得ることができる。

 PowerShellでは、以下のリストのようにコマンドの組合せで、さまざまな処理が可能であり、結果によって何らかの処理や記録、通知をできる。

Get-Counter "\Process(*)\% Processor Time" | Foreach-Object{   foreach($x in $_.CounterSamples){     if($x.CookedValue -gt 5 -and $x.InstanceName -ne "idle" -and $x.InstanceName -ne "_total"){       Write-Host "$($x.InstanceName) $($x.CookedValue)"     }   } }

Windows上でCPUの負荷状態を調べためのいくつかの方法
PowerShellのGet-Counterコマンドでパフォーマンスカウンターの値を取得でき、パイプラインでコマンドを組み合わせることで、カウンター値に応じて処理を行うなどが可能になる。ここでは、全プロセスのプロセッサ時間の割り当てからその値が5を越えるものだけを表示させている

 パフォーマンスカウンターのインスタンスに「*」を指定すると、すべてのインスタンスを出力する。ここでは、カウンターセットに「Process」を指定しているので、プロセス(インスタンス)ごとのCPU使用率を得ることができる。

 すべてのプロセスの情報が1つのオブジェクトとしてパイプに出力される。ここで、Get-Counterにサンプリング回数や間隔を指定すると、全プロセスの情報を含むオブジェクトが複数パイプライン側に出力される。

 なので、サンプリングごとに処理するため、Get-Counterコマンドの出力をforeach-objectで受ける。その中で、foreachループを使って、if文でインスタンス1つ1つを調べ、CookedValueが5以上になるものを見つけて表示させている(idelと_totalは除外している)。

 typeperf.exe、Get-Counterコマンドなど、パフォーマンスカウンターを扱えるツールを使うことで、Windowsの状態を調べることができる。ただ、すべてのカウンターに関しての日本語化されたドキュメントがあるわけではないので、どのカウンターを調べるべきか迷うことが多い。とりあえずはパフォーマンスモニターのカウンター追加ダイアログで、「説明を追加する」のチェックボックスをオンにすると、解説を日本語で見ることができる。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください