[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+] |
Windows さんにはパフォーマンスカウンタというものがあって、
ごていねいにいろいろなことをカウントしてくれているみたいです。
あ、WindowsXP と Windows2000 で動作確認しています。
詳しくはよくわかっていませんが、Windows さんは、
プロセッサとかプロセスとかメモリとかディスクとかネットワークとか、
あらゆるものの状態を逐一監視してくれていて、
パフォーマンスカウンタというものに値を記録してくれているようです。
# 違っていたらすみません…。
まず、大きいカテゴリとしてパフォーマンスオブジェクトというのがあります。
例えば、System, Process, Network Interface, TCP などがあります。
そして、パフォーマンスオブジェクトそれぞれに対して、カウンタがあります。
例えば、System には Processes や Threads, System Calls/sec などが、
Network Interface には Bytes Total/sec や Packets/sec などがあります。
また、System や TCP などインスタンスを持たないものと、
Process や Network Interface などインスタンスを持つものがあります。
例えば、Process は Idle, System, smss, winlogon などのインスタンスを持ちます。
まずは、パフォーマンスオブジェクト、インスタンスやカウンタにどのようなものがあるのか、
一覧を出力させてみます。
パフォーマンスオブジェクトは、PdhEnumObjects() で得られます。
インスタンスとカウンタは、PdhEnumObjectItems() で得られます。
PdhEnumObjectItems() では、パフォーマンスオブジェクト名を指定します。
というわけで、サンプルはこちらです。
実行例を、以下に示します。
>pcnt_enum ...前略... Processor Instance(Processor): 0 _Total Counter(Processor): % Processor Time % User Time % Privileged Time Interrupts/sec ...後略 |
つぎに、実際にカウンタの値を得ます。
パフォーマンスカウンタを指定するために、以下のパスを使用します。
\パフォーマンスオブジェクト名(インスタンス名)\カウンタ名 |
インスタンスがない場合は、(インスタンス名)を省略します。
例を以下に示します。
\Processor(0)\Interrupts/sec \Process(Idle)\% Processor Time \IP\Datagrams/sec \TCP\Connections Established |
実際には、まず PdhOpenQuery() でオープンし、
PdhAddCounter() で測定したいカウンタをパス名で指定します。
それから、PdhCollectQueryData() で実際の値を入手し、
PdhGetFormattedCounterValue() でお好きな形式の値に変換します。
というわけで、サンプルはこちらです。
引数にパスを指定すると、そのカウンタ値を出力します。
実行例を以下に示します。
>pcnt_count "\Processor(0)\Interrupts/sec" \Processor(0)\Interrupts/sec = 166.056719 >pcnt_count "\TCP\Connections Established" \TCP\Connections Established = 18.000000 |
しかし、いちいちパスを指定するのは面倒です。
うれしいことに、選択のためのダイアログを表示して、
パスを得られる関数が用意されています。
PdhBrowseCounters() という関数です。
引数に PDH_BROWSE_DLG_CONFIG という構造体を渡します。
というわけで、サンプルはこちらです。
一発だけだとつまらないので、1秒毎に出力させてみました。
例えば、"\Network Interface(インタフェース名)\Bytes Total/sec" を指定すれば、
ネットワークの使用状況をを確認できます。
# GUI じゃないのでうっとおしいですが…。
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-] | |
usu@usupi.org | Last modified : Tue Jun 22 00:26:27 2004 |