17

デッドロックしているように見えるプロセスがあります。

# strace -p 5075
Process 5075 attached - interrupt to quit
futex(0x419cf9d0, FUTEX_WAIT, 5095, NULL

それは "futex" システム コールにかかっており、ロックを無期限に待機しているようです。「top」を実行すると、プロセスが大量の CPU を消費していることが示されます。

# top -b -n 1
top - 23:13:18 up 113 days,  4:19,  1 user,  load average: 1.69, 1.74, 1.72
Tasks: 269 total,   1 running, 268 sleeping,   0 stopped,   0 zombie
Cpu(s):  8.1%us,  0.1%sy,  0.0%ni, 91.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  12165696k total,  3810476k used,  8355220k free,    29440k buffers
Swap:  8388600k total,    43312k used,  8345288k free,   879988k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
5075 omdb      18   0 2373m 1.7g  26m S 199.7 14.9 102804:11 java

プロセスは "S" - スリープ状態にあることも示されています。これは、何らかのリソースを待機している場合に意味があります。ただし、プロセスがスリープ状態の場合に CPU 使用率が 200% 近くになる理由がわかりません。top がスリープ中のプロセスでこのように高い CPU 使用率を報告するのはなぜですか? その CPU 使用率はゼロであってはなりませんか?

4

4 に答える 4

9

によって報告される CPU 使用率topとプロセス状態の間に相関関係はありません。マニュアルページには次のように書かれています(私の強調):

%CPU -- CPU 使用率

最後の画面更新以降に経過した CPU 時間のタスクのシェア。合計 CPU 時間のパーセンテージとして表されます。

したがって、最後の画面更新以降、プロセスは実際に膨大な量のプロセッサ時間を使用しました。はい、スリープしていますが、それは現在実行中のプロセスがtopそれ自体であるためです (現在画面を更新しているため、これは理にかなっています)。

于 2012-05-16T23:28:49.987 に答える
4

出力はtop完全に正常です。

負荷平均の計算には、実際に CPU を使用しているプロセスだけでなく、何か (mutex/futex、IO など) を待機しているプロセスも含まれます。たとえば、次のようなものを実行してテストします。

dd if=/dev/sda of=/dev/null

何が起こるかを見るためにトップ出力を見てください。負荷平均が 1 増加します。

この行を見ると:

Cpu(s):  8.1%us,  0.1%sy,  0.0%ni, 91.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

「91.8%id」の「id」は「アイドル」を意味します。つまり、CPU は実際にはあまり機能していません。

于 2012-05-16T23:29:33.377 に答える
4

アプリケーションは子プロセスをフォークしますか? strace の出力は、メイン プロセスが子プロセスが作業を終了するのを待っていることを示している場合があります。もしそうなら、あなたは実行してみることができます

strace -f -p 5075

子プロセスも追跡します。

于 2013-06-25T23:57:12.390 に答える