Por que o top reporta um uso de CPU diferente do CloudWatch?

9

topmostra um uso médio da CPU durante os horários de pico de cerca de 20%, enquanto o monitoramento CloudWatch mostra um uso médio da CPU de 40%. O que causa essa discrepância?


fonte

Respostas:

15

Uma observação muito boa e também encontramos isso. Aqui está o que eu encontrei:

Cuidado ao medir o uso da CPU em uma instância do EC2. É possível ver o uso da CPU bem abaixo de 100% - e ainda assim estar completamente maximizado. Confie em mim: estive lá, fiz isso. (A propósito, o CloudWatch CPUUtilization é medido de fora da instância e está sempre correto.)

Há uma descrição muito boa de tudo isso aqui: https://axibase.com/news/ec2-monitoring-the-case-of-stolen-cpu/

No exemplo acima, a instância do m1.small EC2 recebeu 0,4 unidades de processador e, portanto, 40% de CPU ocupada significa a porcentagem de uso do núcleo subjacente. No entanto, como 40% é o compartilhamento máximo da CPU que pode ser alocado para esta VM, o uso efetivo da CPU é 40% / 40% = 100%. Qual é o número exibido pelo CloudWatch.

Se você está se perguntando de onde vem 40%, a matemática é bem simples. O sistema m1.small linux tem direito a 1 unidade de computação EC2, que fornece a capacidade equivalente da CPU de um processador Opteron de 2007 a 1,2 GHz ou 2007 Xeon de 1,0 a 1,2 GHz. Como a VM é executada em uma máquina com velocidade de clock de 2,6 GHz, ela tem direito a 38,4% a 46,2% de compartilhamento do processador nesse nó XEN em particular. Você pode executar o comando cat / proc / cpuinfo para descobrir a arquitetura da CPU por trás das instâncias do EC2.

Preste atenção especial à dica sobre como lidar com ferramentas que não sabem sobre a matemática especial:

Outra opção que pode ser usada para atualizar as ferramentas de monitoramento existentes baseadas em agente ou SNMP, que não se integram ao CloudWatch, é usar a métrica ociosa da CPU. Tudo o que você precisa fazer é reescrever regras para medir a ociosidade da CPU em vez da CPU ocupada. Por exemplo, se você tiver um limite> 75% definido para a CPU ocupada, crie uma regra <25% para a CPU ociosa. Se a CPU inativa for 0, seu servidor estará vinculado à CPU.

Muito simples. Muito agradável.

Quando você executa a parte superior da instância do EC2, ele mede o uso da CPU da máquina de núcleo físico que está executando sua instância e outras. Esse uso está incorreto se você deseja medir apenas o uso da CPU da sua instância (a unidade de computação EC2 atribuída à sua instância).

É por isso que as métricas do cloudwatch são reais, pois são medidas externamente à instância para a (s) unidade (s) de computação EC2 atribuída (s) apenas à sua instância.

Veja aqui - https://forums.aws.amazon.com/thread.jspa?threadID=99993

Chida
fonte
Em outras palavras, ambos estão certos, mas medem coisas diferentes.
bahamat
1
Você poderia colocar dessa maneira. No entanto, o OP está preocupado com o que ele acha que vê não é o que a Amazon diz que vê. Portanto, no caso dele, os dados principais estão incorretos para ele. Mas, se você medir o uso da CPU do núcleo subjacente para depurar problemas de desempenho, é muito útil executar o melhor. Se você está preocupado apenas com o uso da sua instância, o cloudwatch é o caminho a percorrer. Então, sim, ambos medem coisas diferentes.
Chida
1
Acho que deveria ter seguido minha afirmação com "o primeiro é o que você pensa que quer, o segundo é o que você realmente quer", mas pensei que já havia sido coberto.
bahamat
+1 para o que você acabou de dizer :)
Chida
1
Eu recuperei o conteúdo do link morto da máquina wayback e o adicionei diretamente ao post.
Johano Fierra 13/09/19