/proc/<pid>/stat
すべてのプロセスにユーザーCPU、システムCPU、サブユーザー、およびサブシステムCPUを追加しました。前のサンプルからデルタをインポートしました。
ユーザー、Nice、およびシステムCPUを合計した後は、ボックス全体に対応する/proc/stat
必要があります。私は再びデルタを取る。
プロセスの合計はほぼ常にプロセッサ全体の合計よりわずかに大きく、その理由を理解できません。
答え1
これにはいくつかの理由がありますが、最も明確な理由は、各プロセスの会計が異なるロジックを使用して異なるものを計算することです。
2つの具体的な例:
- システムには、ユーザーが良いタスク(低い優先順位)に費やした時間を計算する列が
stat
ありますnice
。送信時間を指定していないため、合計していないようです。このプロセスでは、これは標準ユーザー時間として計算されます。 iowait
時間(また考慮しない時間)は、プロセス内のstat
システム時間として計算できます。しかし、iowait
同時に時間を計算するのは、man proc
以下のように実際の時間を計算することは非常に信頼できないため、悪い考えです。
iowait(Linux 2.5.41以降)
(5) I/O が完了するのを待つ時間です。この値は、次の理由で信頼できません。
CPU は I/O が完了するまで待機しません。 iowaitは、ジョブがI / Oが完了するのを待つ時間です。完了していないジョブI / OによってCPUがアイドル状態になると、そのCPUに他のジョブがスケジュールされます。
マルチコアCPUでは、I / Oが完了するのを待つタスクはどのCPUでも実行されないため、CPUあたりのiowaitを計算するのは困難です。
場合によっては、このフィールドの値が小さくなることがあります。
最後に、このタイプの会計は、深刻な目的のために十分に正確ではないため、役に立たないと思います。システムおよびプロセスカウンタは、様々な目的のためにシステムの他の部分で処理され、何とも一致しない。便利な程度。