Uso de CPU do Linux e Histórico de Execução de Processos

38

Existe alguma maneira de ver quais processos causaram mais uso da CPU?

Eu tenho o AMAZON EC2 Linux, cuja utilização da CPU atinge 100% e me faz reiniciar o sistema. Eu não consigo nem fazer login através do SSH (usando o putty).

Existe alguma maneira de ver o que causa um uso tão alto da CPU e qual processo causou isso?

Eu conheço sare topcomando, mas não consegui encontrar o histórico de execução do processo em nenhum lugar. Aqui está a imagem da ferramenta de monitoramento Amazon EC2, mas eu gostaria de saber qual processo causou isso:

insira a descrição da imagem aqui

Eu também tentei, ps -eo pcpu,args | sort -k 1 -r | head -100mas sem sorte, encontrar um uso tão alto da CPU.

PMoubed
fonte

Respostas:

34

Existem algumas maneiras possíveis de fazer isso. Observe que é inteiramente possível seus muitos processos em um cenário descontrolado, causando isso, não apenas um.

A primeira maneira é configurar o pidstat para executar em segundo plano e produzir dados.

pidstat -u 600 >/var/log/pidstats.log & disown $!

Isso fornecerá uma visão bastante detalhada da execução do sistema em intervalos de dez minutos. Eu sugeriria que este seja seu primeiro porto de escala, pois produz os dados mais valiosos / confiáveis ​​para trabalhar.

Existe um problema com isso, principalmente se a caixa entrar em um loop descontrolado da CPU e produzir uma carga enorme - você não garante que seu processo real seja executado em tempo hábil durante a carga (se houver), para que você possa realmente perder a saída !

A segunda maneira de procurar isso é habilitar a contabilidade do processo. Possivelmente mais uma opção de longo prazo.

accton on

Isso permitirá a contabilidade do processo (se ainda não tiver sido adicionada). Se ele não estava sendo executado antes, isso precisará de tempo para ser executado.

Tendo sido executado, por exemplo, 24 horas - você pode executar um comando (que produzirá uma saída como esta)

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

As colunas são ordenadas da seguinte forma:

  1. Número de chamadas
  2. Porcentagem de chamadas
  3. Quantidade de tempo real gasto em todos os processos desse tipo.
  4. Percentagem.
  5. Tempo de CPU do usuário
  6. Percentagem
  7. Tempo de CPU do sistema.
  8. Média de chamadas de E / S.
  9. Percentagem
  10. Nome do comando

O que você procurará são os tipos de processo que geram mais tempo de CPU do usuário / sistema.

Isso divide os dados como a quantidade total de tempo da CPU (a linha superior) e, em seguida, como esse tempo foi dividido. A contabilização de processos é contabilizada corretamente apenas quando os processos são ativados, portanto é provavelmente melhor reiniciar o sistema depois de permitir que ele garanta que todos os serviços sejam contabilizados.

Isso, de maneira alguma, realmente lhe dá uma idéia definitiva de qual processo pode ser a causa desse problema, mas pode lhe dar uma boa sensação. Como pode ser um instantâneo de 24 horas, existe a possibilidade de resultados distorcidos, portanto, lembre-se disso. Ele também deve sempre registrar, pois é um recurso do kernel e, diferentemente do pidstat, sempre produzirá saída mesmo durante carga pesada.

A última opção disponível também usa a contabilidade do processo para que você possa ativá-la como acima, mas use o programa "lastcomm" para produzir algumas estatísticas dos processos executados na época do problema, juntamente com as estatísticas da CPU para cada processo.

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

Isso pode lhe dar algumas dicas também sobre o que pode estar causando o problema.

Matthew Ife
fonte
Resposta muito agradável e detalhada, bom trabalho!
Bart De Vos
2
Cuidado, se você ainda não usou, experimente! Ele reúne as mesmas informações que o pidstat, mas as apresenta em uma interface muito mais adequada para a exploração interativa. Ele também possui um comando atopsar se você preferir relatórios de estilo sar.
sciurus
18

Atop é um daemon particularmente útil para analisar detalhadamente o nível do processo e, por padrão, arquiva esses dados por 28 dias. Além de apresentar uma incrível interface de monitoramento em tempo real, você pode especificar esses arquivos de log para abrir e percorrê-los.

O artigo fornece uma idéia dos recursos e você pode encontrar mais na página de manual .

É realmente um software maravilhoso.

Jeff Ferland
fonte
3

Programas como psmon e monit talvez útil para você. Eles podem monitorar os processos em execução no seu sistema e se algum limite (uso da CPU, uso de memória ...) for excedido, você poderá configurá-los para enviar um relatório por e-mail sobre o que está acontecendo.

Também é possível reiniciar automaticamente os processos que se comportam mal.

Janne Pikkarainen
fonte
0

Uma solução é escrever um script que é executado via cron de um minuto ou em um ciclo de suspensão e envia um email / scp job / dump para um volume ebs ... com saída relevante (dmesg, pstree -pa e ps aux, provavelmente vmstat) no instante em que encontra a média de carga acima de um determinado limite ...

rackandboneman
fonte