Ho un processo che sembra essere in fase di stallo:utilizzo della CPU alto per dormire processi
# strace -p 5075
Process 5075 attached - interrupt to quit
futex(0x419cf9d0, FUTEX_WAIT, 5095, NULL
Si è seduto sulla chiamata di sistema "futex", e sembra essere a tempo indeterminato in attesa di un blocco. Il processo è dimostrato di essere consumare una grande quantità di CPU quando "top" è gestito:
# 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
Il processo è anche dimostrato di essere in una "S" - stato di sospensione, che ha un senso se è in attesa di un po ' risorsa. Tuttavia, non capisco perché l'utilizzo della CPU sarebbe vicino al 200% se il processo è in stato di sospensione. Perché top riporta un utilizzo così elevato della CPU in un processo di sospensione? L'utilizzo della CPU non dovrebbe essere zero?
Bene, il fatto che 'top' sia in esecuzione non significa che l'altro processo debba andare a dormire. Più del 100% di utilizzo implica un sistema multicore ;-). Anche se la shell interattiva e i sottoprocessi che genera spawn potrebbero essere contemporaneamente in esecuzione e * happening * per far sì che l'altra attività stia dormendo, ma non è necessariamente diretta da una causa, giusto? – binki