Windows上でCPUの負荷状態を調べためのいくつかの方法
ASCII.jp / 2023年12月3日 10時0分
Windowsの反応が悪いときなど、CPUの負荷状態を知りたくなることがある。一番簡単な方法としては、タスクマージャーを使うのがいいだろう。タスクマネージャーのパフォーマンスタブにあるCPUを見ると、プロセッサの使用率が表示されている。これが現在のCPUの負荷状態を表している。
![Windows上でCPUの負荷状態を調べためのいくつかの方法](https://ascii.jp/img/2023/12/03/3649338/x/83cb99ff635cc144.png)
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の負荷状態を調べためのいくつかの方法](https://ascii.jp/img/2023/12/03/3649339/x/f22a7f644c2e4994.png)
コマンドラインから確認する方法
スクリプトを作る、あるいは簡易に現在の状態を知りたいなどの場合には、コマンドラインからもパフォーマンスカウンターを扱うことができる。その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の負荷状態を調べためのいくつかの方法](https://ascii.jp/img/2023/12/03/3649340/x/730d8a300642cb65.png)
パフォーマンスカウンターのインスタンスに「*」を指定すると、すべてのインスタンスを出力する。ここでは、カウンターセットに「Process」を指定しているので、プロセス(インスタンス)ごとのCPU使用率を得ることができる。
すべてのプロセスの情報が1つのオブジェクトとしてパイプに出力される。ここで、Get-Counterにサンプリング回数や間隔を指定すると、全プロセスの情報を含むオブジェクトが複数パイプライン側に出力される。
なので、サンプリングごとに処理するため、Get-Counterコマンドの出力をforeach-objectで受ける。その中で、foreachループを使って、if文でインスタンス1つ1つを調べ、CookedValueが5以上になるものを見つけて表示させている(idelと_totalは除外している)。
typeperf.exe、Get-Counterコマンドなど、パフォーマンスカウンターを扱えるツールを使うことで、Windowsの状態を調べることができる。ただ、すべてのカウンターに関しての日本語化されたドキュメントがあるわけではないので、どのカウンターを調べるべきか迷うことが多い。とりあえずはパフォーマンスモニターのカウンター追加ダイアログで、「説明を追加する」のチェックボックスをオンにすると、解説を日本語で見ることができる。
この記事に関連するニュース
-
Windowsはなぜ再起動が必要になるのか?
ASCII.jp / 2024年6月30日 10時0分
-
Windowsが今更(?)開発者に優しくなろうとしている!? 「Dev Home」は開発者にとって使い物になる?
ASCII.jp / 2024年6月23日 10時0分
-
人材紹介会社を装いマルウェアを配布するサイバー攻撃に注意
マイナビニュース / 2024年6月18日 11時31分
-
窓辺の小石 第170回 ネットの総和
マイナビニュース / 2024年6月14日 10時13分
-
Windows Subsystem for Linuxガイド 第36回 WSL2でDockerを使う その2「Dockerエンジン編」
マイナビニュース / 2024年6月10日 17時57分
ランキング
-
1「鳥肌たった」「これこそアート」 SNSで約13万いいねを集めた1枚のイラスト、衝撃の種明かしに反響 作者に制作経緯を聞いた
ねとらぼ / 2024年7月6日 12時30分
-
2「これはやばいw」 モスバーガーの“狂気のLINEスタンプ”が話題 公式も認める異様な絵面に「夢に出てきそう」
ねとらぼ / 2024年7月6日 17時0分
-
33月末にコンビ解散したお笑い芸人、「また美人になった?」「見るたびにキレイになってく」と反響
ねとらぼ / 2024年7月5日 18時37分
-
4「Pixel 6」シリーズに不具合、最新アプデ→初期化でトラブル発生 Googleが回避策を案内
ITmedia NEWS / 2024年7月5日 8時20分
-
5モトローラが日本市場で急成長している理由 1年で出荷台数2倍以上、「edge」「razr」の販路拡大がカギに
ITmedia Mobile / 2024年7月6日 11時45分
記事ミッション中・・・
記事にリアクションする
![](/pc/img/mission/mission_close_icon.png)
記事ミッション中・・・
記事にリアクションする
![](/pc/img/mission/point-loading.png)
エラーが発生しました
ページを再読み込みして
ください
![](/pc/img/mission/mission_close_icon.png)