都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

typeperf コマンドでパフォーマンスカウンタを取得してみる

 通常 (なのかな?) パフォーマンスカウンタを取得する場合は、パフォーマンスモニタを使用します。

f:id:koogucc11:20131016095647j:plain

 typedef はコマンドベースで実行するものです。

f:id:koogucc11:20131016100111j:plain

 typeperf は取得したいカウンターを別ファイルに保存しておき、それを読みこませることで、設定したカウンターの取得ができます。パフォーマンスカウンターは下図のように設定します。

f:id:koogucc11:20131016101053j:plain

 これらを手入力するのは面倒なので、パフォーマンスモニターの設定画面を使用すると少しだけ便利です。(各行が編集可能になりますので、コピーしてください。)

f:id:koogucc11:20131016101246j:plain

 それでは、設定したパフォーマンスカウンタを 5 秒毎に読み込み、合計のサンプリング数を 1000 に設定、パフォーマンスカウンターの結果はバイナリ形式で出力します。コマンドは下記の通りです。

typeperf -cf pCounter.txt -si 5 -sc 1000 -f bin -o pCounterResult.blg

f:id:koogucc11:20131016102156j:plain

 コマンドの実行を止めるには、Ctrl + C を押下します。

f:id:koogucc11:20131016102717j:plain

 typeperf 以外にも PowerShell でパフォーマンスカウンタを取得する方法があります。.NETFramework の System.Diagnostics.PerformanceCounter を使用する方法です。

スクリプトは下記の通りです。

$pCounter = new-object System.Diagnostics.PerformanceCounter("Processor", "% Processor Time", "_Total")

 PowerShell ISE で実行確認してみます。

f:id:koogucc11:20131016103711j:plain

PS C:\Windows\system32> $pCounter = new-object System.Diagnostics.PerformanceCounter("Processor", "% Processor Time", "_Total")

PS C:\Windows\system32> $pCounter


CategoryName     : Processor
CounterHelp      : % Processor Time is the percentage of elapsed time that the processor spends to execute a non-Idle thread. It is 
                   calculated by measuring the percentage of time that the processor spends executing the idle thread and then subtracting 
                   that value from 100%. (Each processor has an idle thread that consumes cycles when no other threads are ready to run). 
                   This counter is the primary indicator of processor activity, and displays the average percentage of busy time observed 
                   during the sample interval. It should be noted that the accounting calculation of whether the processor is idle is 
                   performed at an internal sampling interval of the system clock (10ms). On todays fast processors, % Processor Time can 
                   therefore underestimate the processor utilization as the processor may be spending a lot of time servicing threads 
                   between the system clock sampling interval. Workload based timer applications are one example  of applications  which 
                   are more likely to be measured inaccurately as timers are signaled just after the sample is taken.
CounterName      : % Processor Time
CounterType      : Timer100NsInverse
InstanceLifetime : Global
InstanceName     : _Total
ReadOnly         : True
MachineName      : .
RawValue         : 25200234375
Site             : 
Container        : 

 パフォーマンスカウンターを取得するのは、どちらがいいんでしょう?個人的には、typeperf がお手軽な気がします。しかし、今の流行りにのるには、やはり PowerShell ですね?