Como encontro o processo com a carga mais alta?

6

Eu tenho um único núcleo VPS com uma média de carga que vai além de 25, às vezes. Quando isso acontece, torna-se insuportavelmente lento, e até mesmo os comandos executados através de dash , que é mais rápido e usa menos RAM que bash , leva um tempo para ser executado. Como posso rastrear qual processo está causando alta carga?

    
por NerdOfLinux 05.11.2017 / 21:12

3 respostas

9

Você pode instalar htop . A coisa boa sobre htop é que ele mostrará seu uso por CPU, bem como um gráfico de texto significativo de sua memória e uso de troca bem no topo.

Para instalar o htop :

sudo apt-get install htop

Comece:

htop

Pressione F6 para classificar os processos e, em seguida, usando a tecla de navegação, você pode escolher PERCENT_CPU e pressionar Enter.

Ou você pode usar top desse modo ( fonte ):

top -b -n 1 | head -n 12
    
por neferpitou 05.11.2017 / 22:04
8

O texto abaixo é meramente roubado de Unix.SE: Encontre o processo que está levando o máximo de uso da CPU se o uso da CPU for superior a 60%? , embora, é claro, seja adaptado a essa pergunta. / sup>

lista processos por uso específico da CPU

ps ahux --sort=-c | awk '{if(>0.0)printf"%s %6d %s\n",,,}'
                               ^^^^

Isso fornece uma lista dos processos que têm um uso da CPU >0.0 %. Você pode alterar esse valor de acordo com suas necessidades, por exemplo, %código%. Cada linha contém o uso da CPU em porcentagem, o PID e o arquivo do processo.

lista de processos com o maior uso de CPU

ps ahux --sort=-c | awk 'NR<=5{printf"%s %6d %s\n",,,}'

Isso mostra os 5 principais processos ( >50.0 ) atualmente causando a maior carga de CPU.

    
por dessert 05.11.2017 / 21:16
1

Ontem eu estava estudando awk e joguei com as outras duas respostas. Aqui está o resultado:

  • Obtenha apenas o processo com o uso de CPU mais alto, usando ps aux :

    ps auxh | awk -v max=0 '{if(>max){CPU=; PID=; NAME=; max=}} END{printf "%5s %6d %s\n",CPU,PID,NAME}'
    
  • Obtenha os três processos com o uso de CPU mais alto, usando top :

    top -b -n 1 | awk 'NR>7 && NR<11 {printf "top: %5s %6d %s %s\n",,,,}'
    
  • Obtenha os três processos com o uso de CPU mais alto, usando ps aux :

    ps auxh --sort=-c | awk 'NR<=3 {printf "ps:  %5s %6d %s\n",,,}'
    

Eu tentei executar os dois últimos comandos simultaneamente (com <command>; wait; <command> e <command> & <command> & ), mas depois percebi que não é possível de jeito nenhum:)

Referências:

por pa4080 06.11.2017 / 10:40