% CPU para um processo

3

Olhando para a saída do topo em nosso servidor, um de meus colegas me disse que o fato de alguns processos terem menos de 100 "% de CPU" era porque eu estava executando muitos processos. Ele acrescentou que, com base em sua experiência, se eu executar menos de 6 processos, provavelmente todos os processos teriam 100% de "CPU".

Eu não quero ser um aborrecimento para outros usuários, mas duvido que o que ele disse está correto. O servidor tem 16 núcleos e a média de carga atual está entre 10 e 11. Pelo que aprendi, ele não está sobrecarregado. Mas eu não sei porque alguns processos estão recebendo menos de 100 "% de CPU"? É realmente por minha causa?

Obrigado e cumprimentos!

Aí vem a saída do topo:

top - 16:34:13 up 32 days,  1:36, 12 users,  load average: 10.61, 10.39, 10.22
Tasks: 380 total,  10 running, 370 sleeping,   0 stopped,   0 zombie
Cpu(s): 55.0%us,  1.7%sy,  0.0%ni, 42.2%id,  0.5%wa,  0.1%hi,  0.4%si,  0.0%st
Mem:  130766620k total, 39859784k used, 90906836k free,   849412k buffers
Swap: 47351548k total,   279456k used, 47072092k free, 19792956k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                        
17197 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4510:11 MLtest                                                                                       
28762 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4633:01 MLtest                                                                                       
29249 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4623:03 MLtest                                                                                       
29560 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4626:59 MLtest                                                                                       
 4904 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4757:12 MLtest                                                                                       
 5143 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4759:40 MLtest                                                                                       
29389 tim    18  -2 1315m 1.3g 1504 R   99  1.0   4622:11 MLtest                                                                                       
 5285 tim    18  -2 1315m 1.3g 1504 R   97  1.0   4758:49 MLtest                                                                                       
 4763 tim    18  -2 1315m 1.3g 1504 R   93  1.0   4754:22 MLtest                                                                                       
 9456 zma    18  -2  206m  85m  11m S   48  0.1  60:46.78 dropbox                                                                                         
 7527 vals   18  -2 1266m 436m  42m S    4  0.3 613:57.10 MATLAB                                                                                          
 2903 root   15  -5     0    0    0 S    1  0.0  19:00.01 rpciod/0                                                                                        
19133 vals   18  -2 1380m 503m  42m S    1  0.4 798:47.99 MATLAB                                                                                          
12454 tim    18  -2 19248 1588 1024 R    1  0.0   0:48.88 top                                                                                             
   12 root   RT  -5     0    0    0 S    1  0.0  35:01.05 migration/3                                                                                     
 2924 root   15  -5     0    0    0 S    1  0.0  27:20.92 nfsiod                                                                                          
12690 jun    18  -2  913m  84m 2684 S    1  0.1 121:55.65 MATLAB                                                                                          
19650 jun    18  -2 19244 1600 1028 S    1  0.0   6:5
    
por Tim 05.10.2009 / 22:48

2 respostas

2

A velha regra de polegares que uso é:

Média de carga aceitável ≤ número de núcleos +1

Isso garante que nunca mais do que um processo esteja aguardando enquanto seus recursos são totalmente utilizados. No entanto, carregada dessa forma, a máquina pode parecer um pouco indiferente quando usada interativamente, você pode considerar liberar alguns recursos para essa finalidade.

A queda que você vê em% cpu para mais de 6 processos simultâneos pode ser causada por muitos fatores diferentes (os cpus não são o único recurso compartilhado ...), para saber qual (is) você precisaria fazer alguns perfis no seu programa.

De qualquer forma, como esta máquina parece compartilhada entre vários usuários para fins de cálculo, aconselho vivamente a configurar alguma forma de agendamento de trabalho, mesmo para o acesso ao shell (você também pode introduzir algum balanceamento de carga dessa maneira). Existem algumas ferramentas para permitir isso, os dois que eu uso são Torque / PBS e Sun Grid Engine (ambos os projetos de OSS).

    
por 06.10.2009 / 10:47
1

Pelo que vejo na saída top que você postou, acho que o mltest não pode consumir mais ciclos do que isso. Consome quase 8x 100%. Não sou especialista em arquitetura de CPU, mas acho que você está atingindo um limite dessa tecnologia multicore. Quantos núcleos por CPU o seu servidor tem?

BTW, você tem uma carga de 10 ou 11 no seu "Quad-Quad Machine"? Ou é a média "% CPU" que você vê? load é o número de processos esperando por um ciclo de CPU, então 10 é bastante alto.

Atualizar após o comentário:
Obrigado por reformatar a saída top e por esclarecimentos sobre o valor load . Eu meio que não concordo com meus colegas aqui - uma carga de 10 é bastante alta, não importa quantos núcleos você tenha. Mas você está executando um teste de referência ou teste de CPU, não é?

Para mais respostas, consulte a postagem cruzada no ServerFault: link .

    
por 05.10.2009 / 23:01