Linux: Como verificar se um processo é retardado por outros processos em execução

3

Eu tenho um processo em execução em uma máquina RHEL 6.3. De alguma forma, isso está demorando mais tempo de processamento do que o mesmo processo sendo executado em outra máquina. Como é possível saber por que esse processo está lento ou se algum outro processo de execução paralela está atrasando esse processo?

    
por user2349990 19.08.2013 / 05:48

2 respostas

2

Você pode tentar depurar o que está acontecendo usando top ou htop .

top & htop mostra a quantidade de recursos que um processo específico está consumindo. Eu executaria seu processo assim: /usr/bin/time myproc para ver quanto tempo está realmente levando para começar. Este comando deve mostrar o mesmo tempo de usuário, mas diferentes tempos de passagem nas duas máquinas.

Uma vez estabelecido que o processo está tomando o mesmo tempo "efetivo" nos vários sistemas, você pode usar top ou htop para determinar quais "outros" processos estão atrasando o sistema que esse processo está demorando mais na machineA vs. machineB.

Exemplo

Digamos que eu tenha o script a seguir, doit.bash .

#!/bin/bash

a=0
while [ 1 ]; do
  let a=a+1
  (( $a==100000 )) && exit
done

Eu então o executo no sistema descarregado:

$ /usr/bin/time ./doit.bash 
1.25user 0.10system 0:01.38elapsed 98%CPU (0avgtext+0avgdata 1272maxresident)k
0inputs+0outputs (0major+366minor)pagefaults 0swaps

Eu então executo este comando para simular alguma carga na minha caixa:

$ dd if=/dev/zero of=/dev/null

Repetindo uma execução de doit.bash :

$ /usr/bin/time ./doit.bash 
2.32user 0.20system 0:02.98elapsed 84%CPU (0avgtext+0avgdata 1268maxresident)k
0inputs+0outputs (0major+365minor)pagefaults 0swaps

Você pode ver que doit.bash demorou mais para ser executado nos dois termos do tempo total do usuário e do tempo decorrido.

  • run1 - (usuário): 1,25 segundos - (decorrer): 1,38 segundos
  • run2 - (usuário): 2,32 segundos - (decorrer): 2,98 segundos

NOTA: certifique-se de Ctrl + C executar o comando dd quando estiver pronto.

    
por 19.08.2013 / 06:40
0

Você tem alguma idéia se o processo é CPU ou IO limitado? Se precisar apenas de CPU, top é seu amigo. Se o pedido for limitado, confira vmstat -Sm 5 , iotop -od5 e iostat -m 5 . Tente descobrir se o problema é causado pelo desempenho lento do dispositivo ou se há algo mais em execução no pior desempenho do sistema.

Se você não souber se a CPU ou IO é limitada, comece com top e observe o valor de espera do sistema IO ( wa ) na parte superior. Se uma ou mais CPUs estiverem aguardando o IO, o valor de espera do IO aumentará. Se você tiver muito valor de espera ocioso e baixo de E / S, seu processo estará aguardando algum tipo de evento de sincronização (provavelmente algum tipo de bloqueio local ou por rede).

    
por 17.05.2017 / 08:51