2012-05-16 13 views
13

を処理します。実行されると、「トップ」プロセスがCPUを大量に消費することが示されている:プロセスはまた、「S」であることが示されている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 

- スリープ状態、それはいくつかに待っている場合は理にかなっていますリソース。しかし、プロセスがスリープ状態にある場合、CPU使用率が200%に近い理由はわかりません。トップがスリーププロセスでこのように高いCPU使用率を報告するのはなぜですか?そのCPU使用率はゼロでなければなりませんか?

答えて

5

topによって報告されたCPU使用率とプロセス状態には相関がありません。 man pageは言う(強調鉱山):

CPU% - 最後の画面更新からの経過CPU時間のタスクのシェアは、合計の割合として表さCPU使用率

CPU時間。

このように、最後の画面の更新以降、プロセスで実際に膨大なプロセッサ時間が使用されていました。それは眠っている、はい、それは現在実行中のプロセスがtop自身であるためです(これは現在画面を更新しているので意味があります)。

+1

「トップ」が実行されているということは、他のプロセスがスリープ状態にあることを意味するものではありません。 100%以上の使用率はマルチコアシステムを意味します;-)。インタラクティブなシェルとサブプロセスが同時に実行されているかもしれませんが、他のタスクがスリープ状態になることは起こりますが、それは必ずしも原因の直接的なものではありません。 – binki

4

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

負荷平均計算には、何か(mutexes/futexes、IOなど)と実際にCPUを使用しているプロセスを待機しているプロセスが含まれます。

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

と何が起こるかを見るために、トップの出力を見て:のようなものを実行している、と言う、ことによってそれをテストします。

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 

「ID」を「91.8パーセントのID」に「アイドル」意味:あなたはこの行を見ればそれは1

によって負荷平均が増加します。 CPUは実際にはあまり効果がありません。

2

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

strace -f -p 5075 

子プロセスをトレースすることもできます。

関連する問題