Porcentagem de cpu é relatada de forma diferente, por diferentes ferramentas, por diferentes sistemas. Uma maneira melhor de considerar a carga da CPU é com carga. Considere a máquina de trabalho sobrecarregada abaixo:
# w
02:22:31 up 221 days, 11:06, 1 user, load average: 9.87, 9.50, 7.25
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
stephan pts/0 173.13.169.18 02:22 0.00s 0.44s 0.00s w
~$ cat /proc/cpuinfo |grep processor
processor : 0
processor : 1
Isso diz que eu tenho uma carga de 1 min de 9,87, carga de 5 min de 9,50 e carga de 15 min de 7,25. O número 'load' representa quantos processadores de trabalho esta máquina foi atribuída, enquanto o comando cpuinfo mostra quantos processadores reais eu tenho para fazer o trabalho. Se eu tivesse 12 processadores, este nível de carga estaria perfeitamente bem.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11579 app 20 0 263m 97m 4104 R 22 1.3 0:00.85 ruby
11586 app 20 0 0 0 0 Z 20 0.0 0:00.62 ruby <defunct>
11589 app 20 0 262m 96m 3884 S 18 1.3 0:00.53 ruby
11592 app 20 0 260m 95m 3000 R 17 1.3 0:00.50 ruby
11600 app 20 0 260m 95m 2744 R 15 1.3 0:00.45 ruby
11595 app 20 0 260m 95m 2744 R 13 1.3 0:00.39 ruby
11598 app 20 0 262m 95m 3096 R 12 1.3 0:00.35 ruby
11604 app 20 0 258m 93m 2744 R 10 1.3 0:00.30 ruby
11607 app 20 0 257m 92m 2496 R 8 1.2 0:00.25 ruby
11610 app 20 0 256m 91m 2560 S 4 1.2 0:00.11 ruby
Assim, você pode ver que os processadores estão sendo divididos entre os processos, mas o que eu me importo é que há mais trabalho do que os cpus podem acompanhar de maneira viável. Isso faz com que os trabalhos na fila tenham que esperar que a CPU esteja livre para usá-los.