我有出現僵持的過程:CPU利用率高對睡眠的進程
# strace -p 5075
Process 5075 attached - interrupt to quit
futex(0x419cf9d0, FUTEX_WAIT, 5095, NULL
這是坐在「futex的」系統調用,並似乎在鎖被無限期等待。該過程被示爲消耗大量的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利用率不應爲零?
好了,'top'運行並不意味着其他進程的事實,必須睡覺。超過100%的利用率意味着多核系統;-)。雖然它產生的交互式shell和子進程可能會同時運行,並且發生*導致另一個任務處於睡眠狀態,但它並不一定是一個原因的直接對吧? – binki