web-dev-qa-db-ja.com

CプログラムからCPU使用率の統計を取得する

CプログラムからCPU使用率の統計情報を読みたい、CPUの使用率、スチール時間などに興味があります。これらの統計情報が表示されますtopコマンドの3行目。

topの出力をawktop -n 1 -b | awk '{print $0}')ですが、topは正しい統計を表示し始める前に、常に同じ「架空の」値を与えるようです。

コードから、またはいくつかのコマンドの出力を解析してCPU使用率の統計を取得する方法はありますか?

編集:

プラットフォームはLinuxです

ありがとうございました。

8
0xFF

/proc/statの最初の数行を読みたい。これを2回読み取り、測定時間を空けて、最初の数値セットを2番目の数値セットから減算する必要があります。行は次のようになります。

cpu  1526724 408013 600675 541100340 2861417 528 14531 0 0 0
cpu0 344507 77818 251244 134816146 1119991 324 13283 0 0 0
cpu1 502614 324065 179301 133991407 1631824 136 906 0 0 0
cpu2 299080 3527 79456 136144067 103208 59 255 0 0 0
cpu3 380521 2602 90672 136148719 6393 7 86 0 0 0
intr 2111239193 344878476 16943 ...

最初の行は、すべてのコアの集計です。次の行は各コアを示しています。 intrで始まる行を見ると、解析を停止していることがわかります。

各数値は、CPUが特定の状態で費やした時間です。単位は通常100分の1秒です。フィールドは、userNicesystemidleiowaitirqsoftirqstealguestguest_Niceです。

もちろん、信頼できるドキュメントはソースコードです。 Linuxカーネルソースのコピーが手元にある場合は、fs/proc/stat.c、特にshow_stat関数を確認してください。

5
David Schwartz

ウェブ上に いくつかの例 があり、読み方を示しています/proc/pid/stat C.

2つの異なる瞬間にutimeまたはstimeの値を読み取り、目的のCPU使用率の統計を計算できます。 (topもこの生データを使用すると思います。)

(忘れました:これはLinux固有です。)

3