Como faço para registrar o uso da CPU por processo?

18

Eu tenho uma caixa no Linode que está passando por um comportamento estranho. De vez em quando, a E / S da CPU e do disco dispara para 100% e o servidor deixa de responder e precisa ser inicializado. Gostaria de investigar melhor o que está acontecendo, mas não sei como descobrir quem é responsável por toda essa CPU e E / S. Estou executando o Gentoo 2.6.18.

Helder S Ribeiro
fonte

Respostas:

20

Você pode tentar fazer algo assim:

while true; do ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 >> logfile.txt; printf "\n" >> logfile.txt; sleep 3; done

que mostraria os dez principais processos em termos de uso da CPU. Você pode alterar o número de processos mostrados alterando o número 10 na "cabeça -10" para um número diferente e com que frequência ele é atualizado alterando o número 3 em "suspensão 3" ou removendo completamente a parte "suspensão 3".

Shawn
fonte
5
Certifique-se de que você tem algum tipo de sono lá, caso contrário, há uma boa chance de que seu processo shell será sempre no top 10. :)
jedberg
Eu acho que sort -nrseria melhor para classificar numericamente (pelo menos no meu ubuntu / debian boxen)
sehe
2
BTW, você deve dar a esse processo a maior prioridade, para que ele permaneça útil durante picos de alta carga (que é o ponto de sua vida útil, afinal).
Spacediver 17/03/14
12

No topo, ele escreverá um log binário de praticamente tudo o que você deseja e, em seguida, você poderá usar uma interface gráfica do tipo top para passar pelas fatias de tempo do dia (o padrão é coletar os dados a cada 5 minutos). http://www.atcomputing.nl/Tools/atop/

ScottZ
fonte
6

Penso que munin é uma das ferramentas de monitoramento de mercadorias que o ajudará a obter algumas informações sobre as atividades de sua caixa. Além disso, existem algumas ferramentas de linha de comando como sar , iostat, ps, top para esse uso.

Ali Mezgani
fonte
5

As outras respostas mostraram apenas como você pode ver o que está acontecendo atualmente, o que não ajuda se o sistema tiver sido reiniciado.

Se você deseja que essas informações sejam registradas para posteridade (ou cobrança, ou qualquer outro uso que você possa ter), o que você quer é contabilidade de processo.

Aqui está um HOWTO que eu encontrei, mas vou ser sincero - já faz uma década desde que usei a contabilidade de processos.

http://tldp.org/HOWTO/Process-Accounting/

Rob F
fonte
2

Uma abordagem mais amigável à solução do shawn para monitoramento quase em tempo real:

while true; do clear; ps -eo pcpu,pmem,pid,user,args --sort=-pcpu c|head -20; sleep 1; done

Isso fornecerá uma visão estática dos 20 principais processos que serão atualizados a cada 1 segundo. A opção "c" no comando ps imprimirá o nome do executável do processo em vez do comando args inteiro. Você pode omitir esta opção se precisar de todas as informações de comando. A coluna% de uso de memória também foi adicionada.

manolis
fonte
1

O Gentoo não tem o comando "top" também?

machine:~/# top

deve fornecer as estatísticas de execução de quais programas causam mais carga.

Emigioso
fonte
Sim, eu sei, mas eu gostaria de ter isso registrado para que eu possa ver a história mais tarde. Quando a CPU dispara, a máquina fica sem resposta, então não consigo entrar e correr toppara ver quem é o culpado. Quero verificar mais tarde e ver qual processo o fez.
Helder S Ribeiro