Como posso descobrir se um processo é CPU, memória ou ligado a disco?

42

Como posso descobrir se um processo está vinculado à CPU, memória ou disco?

ssanj
fonte
Se você estiver usando uma GUI do gnome, poderá adicionar o applet System Monitor ao seu painel. Nas configurações, você pode definir os ciclos perdidos para IO-Wait para aparecer em branco e definir os gráficos de Memória, CPU e Leitura / Gravação de Disco. Normalmente, altero as cores padrão do gráfico para facilitar a distinção entre a memória do usuário / SO e a leitura / gravação do disco. Não é uma solução real, mas é útil ter ao lado de todas as ferramentas mencionadas nas respostas.
Jeremy
1
@ luis-alvarado Eu discordo que esta questão não é útil, embora eu argumentasse que isso poderia se encaixar melhor no StackOverflow ou algo semelhante. Eu vim aqui procurando uma solução.
Skeggse
O problema com a pergunta feita é que ela não leva em consideração o ambiente de execução. Qual método é mais eficaz na descoberta do gargalo do componente host de uma tarefa / processo está intimamente ligado ao tempo de execução, ambiente de execução, SO do host, hardware etc. da tarefa e que ferramentas estão disponíveis para cada componente para inspecioná-la. Alguns tempos de execução (o tempo de execução Erlang ou a JVM da IBM, por exemplo) têm ferramentas detalhadas para isso que abrangem todo o ambiente, outros não possuem ferramentas e deixam você fazendo suposições educadas com base em qualquer htop / iotop / etc. posso te mostrar.
Zxq9
Related: stackoverflow.com/questions/3156334/…
Ciro Santilli escreveu uma mensagem de

Respostas:

19

Isso requer algum vodu. Depende. Exemplo:

  • Se houver memória suficiente e os discos não parecerem muito ocupados, pode ser vinculado à CPU. Observe o uso da CPU e, se estiver na faixa de 100%, é vinculado à CPU. Caso contrário, há um gargalo artificial na implementação. Por exemplo, em uma CPU de núcleo duplo, um único processo encadeado não ultrapassará 50% de uso da CPU.

  • Se a CPU e a memória estiverem disponíveis, mas os discos estiverem muito ocupados ou a latência de E / S parecer alta, é provável que ela esteja ligada. Veja se a adição de mais discos (RAID?) Ajuda.

  • Nenhuma das acima? Verifique a memória disponível.

  • Memória suficiente? Pode haver um gargalo artificial no próprio processo, ou seja, talvez alguém tenha se esquecido de remover o sono (1)? Naah normalmente não é assim tão fácil. ;)

Há uma razão pela qual temos um laboratório inteiro para engenheiros de desempenho na maioria das empresas que lidam com produtos sensíveis ao desempenho!

Use ferramentas como sar, vmstat, iostat, oprofile, lockstat, dtrace, ferramentas específicas de monitoramento de perf, etc. para depurar problemas de perf.

Sudhanshu
fonte
2
Existe uma ferramenta que une tudo isso?
ssanj
normalmente não, mas se o dtrace estiver disponível no seu sistema (Solaris / FreeBSD / Mac OS X?), você pode ir muito longe usando isso.
Sudhanshu 7/08/10
Acabei de lembrar que há Systemtap no Linux (semelhante ao dtrace), exceto que não tenho certeza sobre a maturidade da ferramenta.
Sudhanshu 7/08/10
O vmstat é útil.
James
12

confira iotop, pode ser útil

ithkuil
fonte
iotop não foi instalado por padrão no RedHat
Mona Jalal
9

Uma ferramenta que pode ser útil para verificar em tempo real várias estatísticas do processo (memória, uso da CPU, E / S etc.) é o htop . Não substitui as ferramentas mais especializadas nomeadas por Sudhanshu, mas pode ser um bom começo.

JanC
fonte
4

Assim como as outras ferramentas mencionadas, execute ps l PID, inserindo o ID do processo relevante ou consulte as colunas STATE e WCHAN na parte superior ou no htop.

Se estiver no estado D (para disco), estará executando o arquivo IO. Isso pode ser porque está lendo muitos arquivos ou porque está usando muita memória e troca. A coluna WCHAN lhe dirá qual função do kernel está dentro; pesquisar no Google ou perguntar aqui pode dar uma indicação do que eles significam.

Se estiver no estado R (execução), está usando a CPU no espaço do usuário, ou seja, a CPU está ligada naquele momento.

Se estiver no estado S (inativo), está dentro de uma chamada de sistema interrompível, o que pode significar que ele está realmente dormindo ou está fazendo algo como aguardar o tráfego de rede ou um bloqueio. Mais uma vez, olhar para o wchan específico lhe dirá mais.

Veja também O que é o "Canal em espera" de um processo?

poolie
fonte
2

Executar tope olhar para a linha de uso da CPU. Um alto usuário% indica que está vinculado à CPU. Uma% de espera alta indica que está vinculado à IO.

psusi
fonte