ls
Ubuntu Linux端末で次のコマンドを実行(10,000回)し、それを使用してtop
CPU使用率を監視しました。top
合計CPU使用率(ライン2)は約48%(ユーザー13.1%+コア34.9%)で示されていますが、下のリストには正しいCPU使用率は反映されません。 CPUの6.5%だけがbashプロセスに関連しています。注:Irixモードをオフにしたので、6.5%は行2と同じです。
for i in {1..10000}; do (ls /tmp/ >/dev/null); done
また、「カーネルスレッドを隠す」オプションを選択解除してみましたが、htop
同じ結果が得られました。
システムのどの部分がCPU(コア?)を使用しており、なぜtop
/ hiddenですかhtop
?
答え1
ライフサイクルが非常に短い多くのプロセスを実行しています。トップレベルの出力では、それらの多くを見ることはできません。
Topは、定期的な間隔(通常1秒あたり1回)でシステム活動を測定します。更新するたびに、プロセスのリストを調べて、各プロセスの統計を収集します。スケジューラの運用によっては、ls
この時点でプロセスが 0 個または 1 個ある場合があります。プロセスがtop
表示されない場合は表示されls
ません。top
プロセスが表示されても統計を取得するのは原子的ではありません。プロセスが列挙される時間とプロセスの統計を読み取る時間の間にls
プロセスが終了した場合、プロセスは表示されません。top
したがって、一般的にリストするプロセスはありませんls
。
プロセスがあっても、ls
プロセスは長時間実行されないため、最後の瞬間に占めるCPU使用率は無視できます。おそらくリストの一番下のどこかにあります。
CPU使用量は自動的に測定されず、近似値にすぎないため、カーネルから収集されたCPU使用量統計の合計が、プロセスごとに収集された使用量統計の合計と常に一致するわけではありません。これらの合計は十分に長く実行されているプロセスと一致しますが、この例に示すように、寿命の短いプロセスがある場合は大きく異なる場合があります。