私はトップがどのように機能するかをよく知っています。各プロセスは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使用率です。