Como encontrar os processos que estão monopolizando a máquina

10

Cenário: De repente, meu computador parece lento. O mouse se move, mas as janelas levam muito tempo para abrir, etc. uptimediz que a carga está em 7,69 e está aumentando.

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

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

O sistema está tentando trocar 8 GB de RAM para o disco porque o processo X ...

ou

processo X procura por todo o disco

ou

o processo X usa 400% da CPU "

Então, o que estou procurando é o iostat, o htop / atop e ferramentas semelhantes que se encontram em um 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 escrever "processo", mas o usuário fica rapidamente impressionado quando se trata de "tamanho residente", "memória virtual" ou "ciclo de vida do processo".

Meu argumento é o seguinte: 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 fornecem 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. Portanto, o que a ferramenta deve fazer é procurar processos que consomem algum recurso e listar apenas aqueles junto com "esse processo precisa de muita CPU, isso produz muitos IRQs, esse processo aloca muita RAM (e ainda está crescendo)".

Esta será uma lista relativamente curta. Será muito mais simples para alguém novo localizar o culpado desta lista do que da saída de, digamos, o htopque me dá cerca de 5000 números, mas exige que eu próprio dobre processos multiencadeados (eu tenho 50 linhas que dizem VIRT 2750Mmas apenas 16 GB de RAM - a máquina deve se trocar até a morte, mas é claro, isso é uma interpretação incorreta dos dados que podem acontecer rapidamente).

Aaron Digulla
fonte
Eu não vejo o porquê. Os sintomas que você descreve não são os de uma lixeira do disco (não afetariam o mouse). O mouse lento é a CPU clássica com capacidade total.
soandos
11
Este é apenas um exemplo. Por favor, leve-o com um grão de sal. Imagine um noob sentado em frente ao computador que não sabe nada. Como ele pode descobrir mais facilmente o que está acontecendo (ou seja, sem gastar meia hora de pesquisar o que a saída do topmeio)
Aaron Digulla
Você está procurando um equivalente Linux do gerenciador de tarefas com uma GUI e tudo, ou algo mais?
soandos
Eu procuro algo que corro e que diz "O processo X está monopolizando a máquina".
Aaron Digulla

Respostas:

3

Eu tenho que sorrir para as respostas, porque cada uma disse para você executar a ferramenta X. O único problema é que o que você está vendo é intermitente, não há como correlacionar nada. Uma ferramenta como o sar pode ajudar se você a executar com uma frequência suficientemente alta, mas eu diria que collectl é ainda melhor.

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

Agora, quando você vê algo lento, collectl -p /var/log/collectl/filename --topreproduz os dados e mostra os principais processos. Você também pode simplesmente correr collectl --tope vê-los em tempo real. BTW - qualquer coisa que você possa fazer em tempo real, também poderá reproduzir.

Quanto à carga da CPU, e se você estiver sobrecarregado com interrupções? collectl -sCnão apenas mostrará as cargas em CPUs individuais (ou usará -scpara carga média), mas também mostrará como eles estão gastando seu tempo. Include -j( -scj) e você verá o número de interrupções / CPU. Use maiúsculas -Je você verá os TIPOS de cada interrupção / CPU.

Obviamente, se você realmente gosta do vmstat, sempre pode reproduzir os dados coletados --vmstate os dados históricos serão mostrados no formato vmstat.

Existem muito mais opções do que tenho tempo para listar, mas você pode conferir no SourceForge ou apenas pesquisar no Google.

Mark Seger
fonte
Obrigado; isso não é exatamente o que eu estava procurando, mas pelo menos é um bom ponto de partida.
Aaron Digulla
Ferramenta fantástica! E no Ubuntu (pelo menos desde 12,04), você só precisa instalar o pacote - ele inicia o daemon automaticamente na instalação e na reboots depois :)
nealmcb
6

"top" funciona razoavelmente bem, desde que você veja 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 já está ocupada, ela será mostrada como "us" e "sy" nas colunas "CPU (s):", estando a linha próxima a 100% juntas.

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

Se estiver lento devido à E / S em geral, "CPU (s):" "wa" informa que o tempo é gasto na espera de E / S.

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

Zds
fonte
+1 Mas estou procurando mais uma ferramenta que faça essa análise para mim e imprima o processo junto com algumas informações sobre o que está errado. Não quero reunir isso das figuras "cruas". Qualquer coisa?
Aaron Digulla 22/08/11
11
Sinto muito, mas você não pode resolver problemas como lentidão da máquina sem entender no nível básico a diferença entre diferentes tipos de lentidão. Se tais ferramentas existem, eu não as conheço; provavelmente você precisará de um administrador de computadores / técnico de manutenção.
ZDS
Seria bom que essa ferramenta exista, porque é certamente possível determinar isso automaticamente: se eu sei pela saída de top, o mesmo acontece com um computador. Este não é o sorriso de Mona Lisa, é apenas analisar alguns números para encontrar números "ruins".
Aaron Digulla
2

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

Primeiro, reniceseu shell é 0 ou -10 para obter um sistema mais responsivo e, em seguida, use htoppara encontrar o (s) processo (s) ofensivo (s) e siga-o straceem um determinado processo. Outras ferramentas que podem ser úteis são:

  • vmsat
  • sar
  • iostat
  • pmap
Terpion
fonte
1

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

Bruce ONeel
fonte
Alguma ferramenta que me diga qual driver / componente causa a alta carga de IRQ?
Aaron Digulla
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ê também pode executá-lo a cada X segundos - 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 mostrará os três principais processos da máquina.

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

Se você quiser saber qual memória consumida é diferente da CPU, leia a página de manual superior e altere a ordem da exibição.

Sardathrion - contra o abuso de SE
fonte
Estou procurando algo mais alto nível. Ele deve executar o vmstat e analisar os números para mim, para que eu não precise saber o que "cs" significa e se um "cs" grande é "bom" ou "ruim".
Aaron Digulla