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?

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"

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

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)


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.


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

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


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.


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

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

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.


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].


-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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.