Linux CPU使用率が正しく表示されません。

Linux CPU使用率が正しく表示されません。

私はトップがどのように機能するかをよく知っています。各プロセスは1つのvcpuに基づいており、要約はすべてのvcpuに基づいています。

私は眠りにつくプロセスがあり、これがサーバーに与える実際の影響を理解しようとしています。

一番上には以下があります。

%Cpu(s):  1.4 us,  1.8 sy,  0.0 ni, 96.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                                                 
  38772 root      20   0   62140  15480  12108 R   7.6   1.5   0:15.15 php     

/proc/cpuinfo (および /sys/devices/system/cpu/) に CPU が 1 つだけリストされています。

このプロセスがCPUの7.6%を使用している場合、サーバーはなぜ96.8%アイドル状態ですか?これはワンタイム誤検出ではなく、最上位プロセスのCPU使用率は常に最上位に報告されているサーバー全体の使用量より2〜3倍高くなります。

top は /proc/stat と /proc/pid/stat から取得したとします。

だからこれを念頭に置いて...

プロセスがサーバー上で実行されている間、次の2つのダミーファイルを確認します。

最初の検査

/プロセス/統計

cpu  1970483 7927 2795587 10758959 2446 0 7301 631701 0 0

/proc/38772/stat

38772 (php) S 36827 38772 36827 34816 38772 1077936128 1251 0 0 0 2809 1819

2回目の検査

/プロセス/統計

cpu  1970572 7927 2795638 10763502 2446 0 7301 632255 0 0

/proc/38772/stat

38772 (php) S 36827 38772 36827 34816 38772 1077936128 1251 0 0 0 3098 1986

数学をする...

それで、このプロセスの計算は次のようになると思います。

3098 - 2809 = 289
1986 - 1819 = 167

サーバーの場合は、次のようにする必要があります。

1970572 - 1970483 = 89
1970572 - 1970483 = 51

...それで、topと/procの両方は、このプロセスがサーバー全体よりも多くのCPUを使用していることに同意するようです。どうやってこれができますか?どの計算がより正確であると仮定する必要がありますか?

最新のUbuntu 20.04バージョン(5.4.0-88-generic)を実行しています。

答え1

このプロセスがCPUの7.6%を使用している場合、サーバーはなぜ96.8%アイドル状態ですか?

CPUが1つしかない場合は、一度に1つの実行スレッドしか実行できません。したがって、出力が画面に書き込まれるときのCPUの唯一の使用は、画面に書き込むことです。そして当時利用可能なすべてのCPUを使用しました。ここに表示される値は時間の平均です。つまり、ヘッダ使用率データよりも長期間にわたる各プロセスのCPU使用率です。

関連情報