Como encontrar o (s) processo (s) que estão sobrecarregando a máquina

8

Cenário: De repente, meu computador parece lento. O mouse se move, mas as janelas demoram a ser abertas, etc. uptime diz que a carga está 7,69 e aumentando.

Qual é a maneira mais rápida de descobrir quais processos são a causa da carga?

Agora, as ferramentas "top" e similares não são a resposta, pois elas mostram o uso da CPU ou da memória, mas não as duas ao mesmo tempo. O que eu preciso é o único comando que eu possa digitar quando acontecer - algo que vai descobrir qualquer um dos

System is trying to swap 8GB of RAM to disk because process X ...

ou

process X seeks all over the disk

ou

process X uses 400% CPU"

Então, o que eu estou procurando é iostat, htop / atop e ferramentas semelhantes que são executadas em uma com uma saída como esta:

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

Eu não quero uma ferramenta que me dê alguns números que eu possa analisar, mas uma ferramenta que me diga exatamente qual processo causa a carga atual. Suponha que o usuário na frente do teclado mal saiba como escrever "processo", mas o usuário fica rapidamente sobrecarregado quando se trata de "tamanho de residência", "memória virtual" ou "ciclo de vida do processo".

Meu argumento é assim: Um usuário percebe um problema. Pode haver milhares de razões ... bem, quase :-) O usuário quer saber a origem do problema.

As soluções atuais me dão muitos números, e eu preciso saber o que esses números significam. O que estou procurando é uma ferramenta meta. 99% dos dados são irrelevantes para o problema. Então o que a ferramenta deve fazer é procurar por processos que consumam algum recurso e listar apenas aqueles junto com "este processo precisa de muito CPU, isso produz muitos IRQs, este processo aloca muita RAM (e ainda está crescendo)". / p>

Esta será uma lista relativamente curta. Será muito mais simples para alguém novo localizar o culpado dessa lista do que da saída de, digamos, htop que me dá cerca de 5000 números, mas requer que eu faça processos multi-thread (eu tenho 50 linhas) que diz VIRT 2750M , mas apenas 16 GB de RAM - a máquina deve trocar-se a morte, mas, claro, isso é uma interpretação errônea dos dados que podem acontecer rapidamente).

    
por Aaron Digulla 22.08.2011 / 09:57

5 respostas

2

Eu tenho que sorrir com as respostas, porque cada um disse para você executar a ferramenta X. O único problema é que, se o que você está vendo for intermitente, não haverá maneira de correlacionar nada. Uma ferramenta como sar pode ajudar se você executá-lo com uma frequência alta o suficiente, mas eu reivindico < o collectl é ainda melhor.

Assim como o sar , você o executa como um daemon instalando o RPM e fazendo /etc/init.d/collectl start .

Agora, quando você vir algo lento, collectl -p /var/log/collectl/filename --top reproduzirá os dados e mostrará os principais processos. Você também pode ter executado collectl --top e visualizá-los em tempo real. BTW - qualquer coisa que você pode fazer em tempo real, você pode reproduzir também.

Quanto à carga da CPU, e se você estiver ficando sobrecarregado com interrupções? collectl -sC não só mostrará as cargas em CPUs individuais (ou usará -sc para carga média), mostrará como elas estão gastando seu tempo. Inclua -j ( -scj ) e você verá o número de interrupções / CPU. Use -J maiúscula e você verá os TIPOS de cada interrupção / CPU.

É claro que, se você realmente gosta do vmstat, pode sempre reproduzir dados de coleta com --vmstat e ele mostrará dados históricos no formato vmstat.

Existem muito mais interrupções do que tenho tempo para listar, mas você pode conferir em SourceForge ou apenas no google isso.

    
por 24.08.2011 / 14:44
6

"top" funciona razoavelmente bem, contanto que você olhe para os números certos. Vamos ver:

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

Agora, se o sistema estiver lento porque a CPU está toda ocupada, ele aparece como colunas "us" e "sy" na linha "Cpu (s):" próxima a 100%.

Se estiver lento devido à troca, "Mem:" "free" mostra valores muito baixos e "Swap:" "usei" valores altos.

Se for lento devido a E / S em geral, então "Cpu (s):" "wa "informa que o tempo é gasto em espera de E / S.

Agora, se você sabe que as esperas de E / S são o problema, você pode usar programas "iotop" para saber quais processos criam a maioria das E / S.

    
por 22.08.2011 / 12:14
2

Com base no uso de 400%, presumo que você tenha um processador quad-core. Sua carga média é quase o dobro da capacidade e metade dos processos aguardam CPU.

Primeiro, renice do seu shell para 0 ou -10 para obter um sistema mais responsivo e, em seguida, use htop para encontrar o (s) processo (s) ofensivo (s) e siga isso com strace em um determinado processo. Outras ferramentas que podem ser úteis são:

  • vmsat
  • sar
  • iostat
  • pmap
por 22.08.2011 / 12:23
1

Um rato lento também pode ser devido a uma carga de interrupção muito alta, ou controladores USB estão muito ocupados (suponho que seja um mouse USB).

    
por 22.08.2011 / 10:29
1

O vmstat pode ajudá-lo em termos gerais. Um exemplo de uso é:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

Você pode executá-lo a cada X segundos também - basta adicionar o número X após o comando.

Editar: Em vista do comentário ... Escreva o seguinte em um arquivo e torne esse arquivo executável. Ele informará os 3 principais processos da máquina.

top -n 1 | tail -16 | head -4 | awk '{print $13}'

Se você quisesse saber qual memória estava sobrecarregada em oposição à CPU, leia a man page principal e altere a ordem de exibição.

    
por 22.08.2011 / 11:05