うちのラックサーバーのDELL PowerEdge R360、CPUがXeon E-2488のWindows Server 2019でCPUの使用率をPowerShellのGet-Counterで記録してて、どうも実際に動かしているジョブと記録が違う。タスクマネージャーのパフォーマンスで見るCPUの使用率が正しいのですがその値でないような気がします。
調べてみると以下の記事があり、下のコメントに"\Processor Information(_total)\% Processor Utility"を使えばとあります。
たしかに昔から
(Get-Counter -Counter "\Processor(_Total)\% Processor Time").CounterSamples.CookedValue
として値を取得しており、これを
(Get-Counter -Counter "\Processor Information(_total)\% Processor Utility").CounterSamples.CookedValue
としたところ実際に近い値が得られるようになりました。
このProcessor TimeとProcessor Utilityの違いはなんだろうと調べてみると、そのものずばり以下の記事があり
まずはProcessorは昔からあるカウンターでProcessor InformationがWindows Server 2008 R2で追加された新しいもの。そしてProcessor Timeはスレッドを実行した時間の割合で、CPUのクロック変化に対応しておらず最近のダイレクトに周波数を変化させるCPUではあまり正確ではなさそう。Processor UtilityがパフォーマンスモニターそのものCPU使用率の値とのことです。
つまり昔から使っていたスクリプトのため古いカウンターを見ていたのが原因でした。