Check CPU usage, if it is higher than 80% (as example) Do something.
As CPUs modernas têm vários núcleos e geralmente cada núcleo suporta vários segmentos. Além disso, os núcleos geralmente têm velocidade de clock variável. Não é assim tão simples definir como calcular uma carga da CPU. Sem mencionar que uma única vCPU pode ser 100% inativa ou 100% ocupada a qualquer momento. Não existe uma CPU 80% ocupada instantaneamente.
O que você pode fazer é obter a carga média para cada vCPU durante um período de tempo (o mpstat fornece isso) ou a média para todas as vCPUs combinadas (vmstat).
Mesmo com limite total de CPU, se o consumidor de CPU hostil tiver um único encadeamento, ele poderá não aparecer descaradamente no último caso, porque outras vCPUs podem estar ociosas.
Se multi-threaded e CPU ligado, ele será detectado por ambos os comandos, mas você tem que ter certeza que não é um aplicativo legítimo ou daemon que está carregando sua máquina.
Outra métrica mais útil é derivada da contenção da CPU, ou seja, medir quantos segmentos estão usando e competindo pelos recursos da vCPU. É isso que a média de carga foi projetada para mostrar. Infelizmente, no Linux, a média de carga considera um estado ininterrupto do encadeamento como sendo a carga da CPU. Na verdade, a CPU está inativa e livre para outras tarefas, portanto você deve prestar atenção a esse fator e identificar possíveis casos em que a carga é alta mas a contenção real é baixa.
Finalmente, pode haver situações em que a fila de execução é muito alta, mas por um período de tempo muito limitado. Se o cálculo da média de carga que usa amostragem para obter o valor da fila de execução tiver que selecionar o número nesse momento de pico, o valor médio da carga será strongmente influenciado por vários minutos ou dezenas de minutos.