WindowsのパフォーマンスモニタでCPUとディスクのロードアベレージを表示させるTech TIPS

Windows OSではロード・アベレージの値を表示させるコマンドは用意されていない。 ロード・アベレージの値を調べるには、パフォーマンス・モニタでProcessor Queue Lengthカウンタの値を調べる。ディスクのロード・アベレージはAvg. Disk Queue Lengthカウンタで得られる。

» 2010年09月11日 05時00分 公開
[打越浩幸デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象OS:Windows XP / Windows Vista / Windows 7 / Windows Server 2003 / Windows Server 2008 / Windows Server 2008 R2



解説

●「ロード・アベレージ」とは

 UNIXやLinuxなどのOSでは、システムの負荷状態を表すために「ロード・アベレージ」という指標がよく使われる(日本語にすると「CPU負荷の平均値」)。uptimeやw、topなどのコマンドでその値を確認できる。

Ubuntu Linuxでのロード・アベレージの例 Ubuntu Linuxでのロード・アベレージの例
UNIXやLinuxでは、uptimeやw、topなどのコマンドでロード・アベレージの値を確認できる。3つの数値は、それぞれ過去1分間、5分間、15分間のロード・アベレージ値の平均値。
  (1)これがロード・アベレージ値。

 これらのコマンドでは3つの数値が表示されているが、それぞれ、過去1分間、5分間、15分間のロード・アベレージ値の平均を表している。この値をチェックすることにより、例えば1以下ならば(0にほとんど近ければ)システムの負荷が非常に軽いが、常態的に5とか10を超えるようだと負荷が高いのでなんらかの対策が必要だろう、といった判断ができる*1

*1 実際にシステムの負荷やパフォーマンスを判断するには、これ以外の指標(カウンタ)なども考慮する必要がある。例えば計算主体のプロセスばかりでロード・アベレージが10なら大した問題ではないが、メモリ不足でスラッシング(仮想記憶のページ・インとページ・アウトが多発している状態)が起こっている状態でロード・アベレージが5なら、何らかの対策が必要だろう。ページングに関するパフォーマンス・カウンタやディスク/ネットワーク・デバイスに関するカウンタなども調査する必要がある。


 ロード・アベレージ値は、OS内で現在実行可能な状態にあるプロセスの数(プロセスの実行待ちキューの長さ*2)を表している。例えば実行中のプロセスが10個あり、そのほかのプロセスはすべてウェイト状態(自発的なスリープやI/O完了待ち、イベント待ちなど、すぐには実行しない状態)にあれば、ロード・アベレージ値は10となる。ただし実行待ちプロセスの数というのは瞬間的な値なので、実際には過去1分や5分、15分といった間隔で平均値を求め、それが表示されている。

*2 正確にいえば、プロセス数ではなくスレッド数。1つのプロセスの中には複数のスレッドが含まれており、CPUのコアにはこのスレッドが1つずつ割り当てられ、実行される。ロード・アベレージの一般的な説明では実行待ちのプロセス数などと呼ばれているので、ここではプロセス数とする。なお、UNIXやLinuxのロード・アベレージでは、実行待ちのプロセスだけでなく、現在CPUコア上で実行中のプロセスも合算してロード・アベレージを計算するのが一般的なようだが、後述のWindows OSの「Processor Queue Length」カウンタでは、実行中のプロセスは除外されるので、少し値が低くなる。


ロード・アベレージ ロード・アベレージ
プロセス(スレッド)が生成されて実行可能状態になると、実行待ちの行列(キュー)に入れられる。プロセス・スケジューラは待ち行列から1つずつ取り出し、それをCPU(コア)に割り当て、実行を開始する。一定時間が経過したり、指示があると、実行を停止して、また待ち行列へ戻されたり、スリープしたりする。ロード・アベレージはこの実行可能状態になっていて、実行待ちキューに入っているプロセスの総数を一定時間ごとに平均した値である。実行可能状態ではないプロセス数は加算しない。なおコアごとの平均値ではないので、マルチコア/マルチプロセッサ・システムでは、ロード・アベレージが1を大きく超えていても、システム全体としての負荷は大きくない。

 なお、このロード・アベレージは単純に実行待ちプロセスの数を表したものであり、CPUのコア数は考慮していない。そのため、例えばシングル・コアのシステムでロード・アベレージが5なら負荷が高いといえるが、16コアのシステムならば全体的なCPU使用率は約30%しかなく、十分余裕がある。コアごとの平均値(コア数で割った値)にしていないのは、単に歴史的な経緯からであろうが、この値について検討する場合は、コア数なども考慮する必要がある。

 Windows OSではタスク・マネージャを使えばシステムの負荷を簡単に調べることができるが、ロード・アベレージ値を直接表示するコマンドやツールはない。だが、パフォーマンス・モニタを使ってプロセスの実行待ちキューの値を表示させれば、ロード・アベレージ・モニタとして利用できる。本TIPSでは、その方法について解説する。

●CPU使用率とロード・アベレージの違いについて

 タスク・マネージャではCPU使用率(もしくはコアごとの使用率)が%で表示されているが、これはロード・アベレージとは異なる。CPU使用率は、CPUがある単位時間内にどの程度利用されているか(プロセスを実行しているか)を示すもので、0〜100%の値を取る。CPUが常にプロセスを実行していれば100%となるが、実行待ち行列がいくら長くても100%までしか表示されない*3。CPU使用率が常に100%になっているようなシステムは性能に余裕がないことを表しているが、さらにロード・アベレージ値を調査することにより、システムの負荷の傾向を把握できる。例えば1日のうち、数時間だけロード・アベレージ値が(コア当たりで換算して)5とか10になる程度なら問題は少ないが、ほぼ24時間ずっと大きな値を示しているようなら、負荷の軽減(分散)やシステムの増強などを考える必要があるだろう。

*3 CPU使用率とロード・アベレージを例えば現実の飲食店で例えると、「店内にいる客数÷席数」がCPU使用率で、「店内の客数+外で行列待ちしている客数」がロード・アベレージに相当する(行列は必ず店外で起こるものとする)。


操作方法

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。