Como descubro qual processo está causando alto uso da CPU?

2

Eu tenho um problema estranho acontecendo na minha máquina virtual Solaris: Depois que ele é inicializado e mantido por 1-2 horas, o uso da CPU aumentará para 100% por 5 segundos, depois para o normal por mais 5 segundos, e repete assim até a reinicialização - torna minha máquina virtual Solaris totalmente inutilizável.

Eu gostaria de descobrir o que está acontecendo durante os 5 segundos repetidos em 100% do uso da CPU, mas o sistema não responde durante 5 segundos - nem mesmo as interrupções do mouse / teclado são manipuladas e, portanto, não consigo ver o nome do processo usando top ou prstat .

Então, eu gostaria de descobrir:

  • o ID do processo que causou o uso de 100% da CPU
  • o que o processo estava fazendo durante o uso de 100% da CPU

Por favor, ofereça suas sugestões, obrigado!

    
por Howard 25.08.2012 / 08:11

2 respostas

5

Você pode tentar executar a parte superior no modo em lote:

top -b -n100 > top.log

em que -n100 representa 100 iterações.

Outra alternativa é usar o ps com argumentos apropriados (estes são do Linux, você pode precisar consultar a man page do ps no Solaris). Por conveniência, o comando é incorporado em um script Bash.

   #!/bin/bash 
   while true ; do
      ps -eo pcpu,pmem,pid,ppid,args >> process.log
      sleep 1
   done

Você também pode ter que alterar a prioridade do processo de registro de atividades do processo para tempo real com o comando nice .

    
por 25.08.2012 / 08:24
3

Especialmente quando você está executando em um ambiente virtualizado, não deve assumir diretamente que o culpado é um processo.

Isso também pode ser um problema de hypervisor ou relacionado a um kernel.

Eu usaria o dtrace para descobrir o que o kernel está fazendo durante esses altos períodos de uso da CPU:

O DTraceToolkit cputimes e modcalls.d seriam um bom começo.

Se o seu sistema operacional host também é Solaris, o dtrace também pode ser útil para identificar a origem da carga da CPU

    
por 25.08.2012 / 11:09