PowerShellでシステムリソースの使用率をリアルタイムで確認する方法

system resourceの短時間monitoringで最初に求められるのはcommand暗記ではなく、何を正しい結果とするかの定義です。結論は「Get-Counterへ複数counterを一度に渡し、SampleIntervalとMaxSamplesで上限を設けます。CPU平均とmemory commitを別指標として保存し、単発の高値で障害と断定しません。」。CPU、memory、disk、networkを同一sampling windowで読み、無限loopやexecution policy変更を不要にすることを確認し、表示、加工、変更を混同しない順序で進めます。

目次

CPU・memory・diskのcounter pathを確認する

システム資源監視は、CPU、利用可能メモリー、ディスク待ち時間など目的に直結するカウンターを少数選び、サンプル間隔と観測時間を明記します。Get-Counterで各パスの有効性を先に確認し、欠測値をゼロへ置換しません。Timestampごとの平均と最大を計算し、単発のピークと継続的な逼迫を分けます。

  • Get-Counter -ListSetでlocal counter名を確認する
  • sampling期間と業務workloadを確認する
  • output fileの容量・ACL・rotationを決める
  • remote監視は既存管理channelと権限を使う

一分以内のbounded samplingを設計する

主要counterを一回取得

Get-Counter '\Processor(_Total)\% Processor Time','\Memory\% Committed Bytes In Use','\PhysicalDisk(_Total)\% Disk Time' |
  Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue,Timestamp

同じ呼出しで時刻差を小さくします。

一分間の上限付き測定

$data=Get-Counter '\Processor(_Total)\% Processor Time','\Memory\% Committed Bytes In Use' -SampleInterval 5 -MaxSamples 12

無期限monitorではなく調査windowを固定します。

counter別統計

$data.CounterSamples | Group-Object Path | ForEach-Object { [pscustomobject]@{Path=$_.Name;Average=($_.Group.CookedValue|Measure-Object -Average).Average;Maximum=($_.Group.CookedValue|Measure-Object -Maximum).Maximum} }

平均だけでspikeを失わないようmaximumも残します。

CSVへ保存

$data.CounterSamples | Select-Object Timestamp,Path,InstanceName,CookedValue | Export-Csv '.\resource-sample.csv' -NoTypeInformation -Encoding utf8

新規名と限定ACLを使います。

process上位を同時刻確認

Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 ProcessName,Id,CPU,WorkingSet64

CPUは累積秒なのでcounter percentと混同しません。

Path別に平均・最大・sample数を集計する

CPU percentはsampling、memory commitはphysical memory使用率と異なり、disk timeはstorage stackやdeviceにより100を超える解釈もあります。counterごとの単位とinstanceを記録し、平均、maximum、継続時間を見ます。Task Managerの表示と比較する際はsampling intervalと指標を合わせます。

raw sampleをlong CSVへ保存する

  • Set-ExecutionPolicyを前提にする
  • 単発値を継続高負荷とする
  • counterのlocal language差を無視する
  • memory指標を混同する
  • 無限loopでlogを増やす

同時刻のprocess上位を補足する

監視は読み取りですが、短いinterval、多数counter、全process詳細、無期限fileは負荷と情報漏えいを招きます。ExecutionPolicy変更は不要です。sample上限、timeout、file上限を設定し、disk不足時はmonitor出力を止めます。監視のためsecurity機能やserviceを停止しません。

localized counterとmissing instanceを検出する

Performance MonitorやTask Managerと同一windowで傾向を照合し、idleと既知loadで値が変化することを確認します。CSV件数はcounter数×sample数と比較し、欠測、NaN、access errorを別に数えます。

time window・Status・sample数で検収する

Get-CounterでCPU、committed memory、diskを同じSampleInterval/MaxSamplesで取り、CounterSamplesをPath別に平均・最大・欠損数へ集計します。単発spikeと継続高負荷を分け、Get-Process snapshotは原因候補の同時刻補足にします。

三resourceを五回sampleして統計化する

$paths='\Processor(_Total)\% Processor Time','\Memory\% Committed Bytes In Use','\PhysicalDisk(_Total)\% Disk Time'
$d=Get-Counter $paths -SampleInterval 2 -MaxSamples 5 -ErrorAction Stop
$d.CounterSamples | Group-Object Path | ForEach-Object { [pscustomobject]@{Path=$_.Name;Samples=$_.Count;Average=[math]::Round(($_.Group.CookedValue|Measure-Object -Average).Average,2);Maximum=[math]::Round(($_.Group.CookedValue|Measure-Object -Maximum).Maximum,2)} }

counter欠損を採取失敗とStatusで識別する

  • 全resourceを採取:各counterに予定sample数があり、CookedValueの平均/最大とtimestamp範囲を計算できる
  • counter未提供:counter 0件/unsupportedはUnknownとして監視正常に置換しない
  • sampling・保存error:PDH status、NaN、localized path、CSV write errorはcounter別Errorにする

% Disk Timeがstorage latencyそのものとは限らず、CPU averageだけで短いsaturationを隠しません。英語counter名が無いhostはGet-Counter -ListSetでlocal名を確認し、IIS tuning資料を一般Windows counter定義の根拠にしません。

idle・短いspike・instance消失を試す

Get-Counter -ListSet 'Processor*','Memory','PhysicalDisk' -ErrorAction SilentlyContinue | Select-Object CounterSetName,PathsWithInstances

idle、短いspike、継続load、counter欠損、localized OSをtestします。予定/実sample数、平均/max、NaN、同時刻top process、counter set名を保存します。

単一snapshotから恒常的な高負荷を断定しません。sample間隔と回数を固定し、平均と最大、同時刻process、CounterSamples.Statusを同じ調査窓で比較します。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次