Linux: Localizando os processos do sistema que estão no topo

2

Estou executando um programa multithread no meu processador de 8 núcleos. O comando top mostra 8 processos em execução e cada um utiliza um núcleo em 100%. O problema é que apenas 21% estão marcados como cpu do usuário e meu aplicativo está rodando tão lento:

Cpu(s): 20.6%us, 79.4%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

Como posso encontrar mais informações sobre o sistema processa aqueles que tomaram 79% do tempo da CPU? Especificamente, quero saber quais são essas chamadas de sistema.

Obrigado antecipadamente!

EDIT: É isso que os principais retornam:

top - 11:23:04 up 83 days,  1:20, 10 users,  load average: 8.00, 8.00, 8.00
Tasks: 267 total,  10 running, 257 sleeping,   0 stopped,   0 zombie
Cpu(s): 40.6%us, 17.4%sy,  0.0%ni, 41.9%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:  16324640k total,  5645008k used, 10679632k free,   285368k buffers
Swap:  2047992k total,    32064k used,  2015928k free,  4584140k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                         
27262 ahmad     20   0  308m  32m  18m R 102.2  0.2   5022:32 Espresso                                                       
26872 ahmad     20   0  176m  12m 4540 R 100.0  0.1   5087:05 Espresso                                                       
27263 ahmad     20   0  175m  13m 4824 R 100.0  0.1   5022:35 Espresso                                                       
27265 ahmad     20   0  175m  12m 4508 R 100.0  0.1   5022:35 Espresso                                                       
26869 ahmad     20   0  308m  31m  18m R 98.3  0.2   5086:20 Espresso                                                        
26870 ahmad     20   0  175m  13m 4864 R 98.3  0.1   5087:05 Espresso                                                        
26871 ahmad     20   0  176m  12m 4592 R 98.3  0.1   5086:58 Espresso                                                        
27264 ahmad     20   0  176m  12m 4552 R 98.3  0.1   5022:06 Espresso                                                        
    1 root      20   0 19404 1164  940 S  0.0  0.0   0:02.12 init                                                            
    2 root      20   0     0    0    0 S  0.0  0.0   0:02.81 kthreadd      
    
por lashgar 13.11.2012 / 09:38

2 respostas

4

É o tempo gasto na execução do código do kernel, mas isso não significa que ele tenha sido acionado por chamadas do sistema. Por exemplo, pode ser tempo gasto lendo diretórios grandes, mas também pode ser o tempo gasto manipulando iptables regras, ou outra coisa.

Você pode instalar o pacote relevante (pode ser denominado linux-tools-2.6 , mas depende da sua distribuição) e usar perf top para ver qual código o kernel está executando. Leia mais aqui sobre perf .

    
por 13.11.2012 / 10:11
-1

Primeiro de tudo. man top Aqui estão alguns exemplos

Utilização da CPU do maior para o menor ou vice-versa SHIFT+r

Uso de MEM SHIFT+m

k = kill a process by it's pid

    
por 13.11.2012 / 09:50