Mostre os cinco principais processos de consumo de CPU com `ps`

101

Como mostrar os cinco principais processos de consumo de CPU com o ps?

PlanasB
fonte

Respostas:

95

Por que usar psquando você pode fazer isso facilmente com o topcomando?

Se você deve usar ps, tente o seguinte:

ps aux | sort -nrk 3,3 | head -n 5

Se você deseja algo realmente "top", com atualizações constantes, use watch

watch "ps aux | sort -nrk 3,3 | head -n 5"
Boban P.
fonte
3
ps aux | ordenar -k 3,3 | - tail -n 5 ;-)
PlanasB
1
será bom incluir a classificação numérica, pular o cabeçalho do ps aux. ps aux | sort -nrk 3,3 | head -n 5
syss 12/05
1
Isso gera muitos processos que é mais consumo de recursos e também é mais propenso a correr estado, porque quando os dados encanada vem à cabeça da lista de processos pode já ter mudado
phuclv
Isso é verdade @ LưuVĩnhPhúc, mas eu me pergunto como isso difere de como toprealmente funciona.
icedwater
1
@icedwater toplê a lista de processos e exibir o resultado em sua própria sem tubulação para qualquer outro processo
phuclv
87

A resposta correta é :

ps --sort=-pcpu | head -n 6

Portanto, você pode especificar colunas sem interferir na classificação.

Ex:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6

Nota para o MAC OS X : no Mac OS X, psnão reconhece --sort, mas oferece -ra classificação pelo uso atual da CPU. Assim, no Mac OS X, você pode usar:

ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6
Facundo Victor
fonte
3
Essa é a resposta correta. Obrigado Facundo. Eu estava tentando explicar aos outros que você pode usar a classificação e o canalizar, mas o ps também vem com uma opção de classificação e agora vejo que você também o usa, o que é ótimo.
Luis Alvarado
O segundo comando aparece mais útil ... mas o primeiro só parece mostrar bash(x2, ou headbem) ps...
Wilf
3
@ Wilf O primeiro é para destacar como classificar por consumo da CPU sem usar o comando sort, o segundo mostra como especificar colunas sem interferir na classificação. Ao explicar alguma coisa ... é sempre melhor ser conciso e explicar uma coisa de cada vez.
Facundo Victor
27

Dependendo das suas necessidades, você pode achar isso um pouco mais legível:

ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5

saída de amostra:

 1.3     4 root     [ksoftirqd/0]
 1.1     9 root     [ksoftirqd/1]
 1.0 17606 nobody   /usr/sbin/gmetad
 1.0    13 root     [ksoftirqd/2]
 0.3 17401 nobody   /usr/sbin/gmond

(os campos são% CPU, PID, USER, COMMAND)

Ryan Horrisberger
fonte
22

Eu não acho psque é o que você está procurando. Você já olhou para a saída top?

Se você possui o GNU-Top, tente usar o modo batch para cuspir uma lista de processos classificada pelo uso da CPU e usando head / tail para obter as 5 principais linhas (os 8 primeiros são cabeçalhos):

top -b -n 1 | head -n 12  | tail -n 5

O topo do BSD parece se comportar de maneira diferente e não possui um modo não interativo; portanto, use uma das outras pssoluções baseadas.

Caleb
fonte
1
No OS X, é top -o cpu -n 5uma maneira de conseguir a mesma coisa. Alguém sabe? O meu topé diferente do seu top.
boehj
Você é o único com o topo diferente, então você estaria em posição de dizer. Minha parte superior não possui -oe -ndefine o número de vezes que atualiza a exibição antes de sair.
Caleb
Justo. Vou pegar uma caixa Linux esta tarde e dar uma olhada. Meu topparece não ter um modo em lote, o que é bastante limitador. Deve haver alguma maneira de canalizar toppara outros comandos. Eu vou fazer uma pesquisa.
boehj
Mencionei a opção de modo em lote na minha resposta, mas na verdade é desnecessária para minha parte superior porque ela detecta automaticamente fazer parte de um canal em vez de uma sessão interativa. Você tentou encaná-lo sem isso?
Caleb
1
Vai fazer. O GNU topfuncionou como descrito nesta tarde. Felicidades.
boehj
6

O liner mais rápido que encontrei para isso (nota 6 porque o cabeçalho se soma):

ps aux k-pcpu | head -6
Nestor Urquiza
fonte
5

Observe que as versões atuais do ps têm a capacidade de classificação dentro delas, com base nos códigos de campo (fornecidos na página man do ps). O código de campo para uso do processador é "c". Você pode usar --sort cno final de um comando ps, por exemplops aux --sort c

Isso colocará o processo usando o maior número de CPUs na parte inferior da lista. Ordem inversa da lista adicionando um sinal de menos ao código do campo usado para classificar, por exemplo,ps aux --sort -c

Cian D
fonte
4

Para adicionar um ponto a outras respostas valiosas, prefiro:

ps auxk-c | head -6

Também imprime o cabeçalho, o que é legal.

Aqui ké idêntico --sorte cespecifica o campo de uso da CPU (alias %cpu) para classificação, enquanto -é para classificação inversa.

Você pode adicionar mais especificadores separados por ,, outros especificadores de possíveis são: %mem, args, bsdstart, pid, gid, uid... onde pode encontrar lista completa de especificadores de formato padrão seção da página homem. Por exemplo:

 ps auxk -gid,-%mem | head -11

imprimiria 10 processos com o ID de grupo mais alto, classificado internamente pelo uso de memória.

2i3r
fonte
3

A ferramenta de linha de comando pstem sua própria opção de classificação, então eu prefiro:

$ ps -eo pcpu,args --sort=-%cpu | head

Você pode adicionar as colunas que deseja. Veja quais outras opções estão disponíveis na pspágina de manual.

$ man ps
Christopher James Morton
fonte
0

topno Mac OS X tem uma opção de modo de log na forma de top -l numberOfSamples(que parece ser equivalente ao modo de lote do GNU top). É necessário, no entanto, ter pelo menos duas amostras porque "a primeira amostra exibida terá uma% de CPU inválida exibida para cada processo, pois é calculada usando o delta entre amostras" ( man 1 top).

# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6
ulf
fonte
0

topexibirá o que está usando sua CPU. Se você o tiver instalado, htoppermite um controle mais refinado, incluindo a filtragem por - no seu caso - da CPU.

PSN
fonte
0

Acredito que a maneira mais simples de ver os 5 principais processos de consumo da CPU é,

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5

Para ver os 5 principais processos de consumo de memória ,

ps -eo pid,comm,%cpu,%mem --sort=-%mem | head -n 5

Onde,

-e : Este sinalizador é usado para selecionar todos os processos

-o : Este sinalizador é usado para formatar como definido pelo usuário.

pid : Este argumento usado para mostrar pid

comm: Este argumento usado para mostrar apenas o nome do comando. Para obter o comando completo args, use cmdoucommand

%cpu: Este argumento mostra a porcentagem de utilização da CPU do processo no formato "##. #". Aqui pcputambém pode ser usado.

%mem: Este argumento mostra a proporção do tamanho do conjunto residente do processo para a memória física na máquina, expressa como uma porcentagem. Aqui pmemtambém pode ser usado.

--sort: Especifique a ordem de classificação. Após =o -sinal ser usado para classificar o valor mais alto no topo, onde a opção padrão +é listar a ordem numérica crescente [ou seja, 0 a n].

Maomé
fonte
-2

top -bn1 |sed -n '7,12'ptambém funciona como um liner agradável.
Embora eu prefira usar ps com o --sort = X -o X, Y, Z

usando ps, você pode obter diferentes estatísticas grep para um processo OU usuário e, em seguida, total OU avg com um pipe para awk.

jshedler
fonte