Primeiro, decida quais estatísticas de CPU você deseja registrar
Você pode escolher diferentes estatísticas para registrar:
- Velocidade da CPU (frequência em Mhz ou Ghz)
- porcentagem de utilização da CPU
- temperatura da CPU
- Fator de carga médio da CPU
- Além disso, essas estatísticas podem ser segmentadas para cada CPU, ou seja, de # 1 a # 8 para CPU hyper-threaded quad-core.
Para simplificar, vou basear essa resposta usando o fator de carga média semelhante à resposta em: Como registrar a carga da CPU?
Crie um loop por duas horas registrando a cada segundo
Você precisará de um script bash para fazer um loop de 7.200 segundos (2 horas), que ficaria assim:
#!/bin/bash
for ((i=0; i<7200; i++))
do
uptime >> /home/user/cpuload.log
sleep 1
done
Analise os dados em uma planilha
Para ver sua saída, use o comando:
$ cat cpuload.log
20:04:06 up 2 days, 14 min, 1 user, load average: 1.39, 1.12, 0.95
A média da carga está relatando três variáveis - último minuto, últimos cinco minutos e últimos quinze minutos. Por uma questão de simplicidade, considere apenas a média de carga de última hora que é reportada a cada segundo em nosso loop.
Você pode importar o arquivo cpuload.log
para uma planilha e representar graficamente os pontos de dados nas duas horas ou simplesmente percorrer os dados.
Eu uso o Libre Office Calc, mas todas as planilhas modernas podem importar o arquivo.
Breves pontos sobre a média de carga
No exemplo acima, a média de carregamento de um minuto é 1.39
. Isso parece perigosamente alto porque qualquer coisa acima de .70
merece investigação e 1.00
significa que há um gargalo e os processos não estão sendo atendidos e temos que esperar.
No entanto, na sua planilha, você terá que dividir a média de carga pelo número de CPUs que você tem. Para descobrir isso rapidamente, use o comando:
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
2074968
2133093
2094750
1863843
1728562
1855875
1849125
1778156
Isso mostra que há 8 CPUs (é uma CPU quad-core Intel i-7 3630QM com hyper-threaded executando 1200 Mhz a 3400 Mhz). Neste instantâneo, a CPU # 1 (chamada internamente CPU0) está rodando em 2,0749.68 Mhz
e a CPU # 8 está rodando em 1,7781.56 Mhz
. Mas eu divago, o importante é contar quantos processadores existem que são 8.
Portanto, divida a média da carga 1.39
por 8 e a média TRUE da carga é 0.17
, o que é muito respeitável. Mais uma vez, qualquer valor acima de 0.70
merece investigação e, quando atingir 1.00
, seu sistema está parando. Você pode ler mais aqui
Usando o comando top
para ver os 10 principais processos
Para usar o comando top
para ver os 10 processos que usam muitos recursos, use este comando em vez do comando uptime
:
top -n 1 -b | head -n 17 | tail -n 10 >> /home/user/top10.log
O arquivo /home/user/top10.log
será parecido com isto (repetido a cada segundo por duas horas):
$ top -n 1 -b | head -n 17 | tail -n 10
6170 rick 20 0 1437432 537000 126060 S 62.5 6.7 8:50.24 chrome
2466 rick 20 0 1210040 140568 61864 S 6.2 1.8 22:16.88 compiz
4111 rick 20 0 742396 248724 185820 S 6.2 3.1 36:26.68 chrome
6280 rick 20 0 41800 3668 3124 R 6.2 0.0 0:00.01 top
10096 root 20 0 0 0 0 S 6.2 0.0 0:00.47 kworker/0:2
1 root 20 0 120064 6244 4000 S 0.0 0.1 0:02.23 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:01.31 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+
7 root 20 0 0 0 0 S 0.0 0.0 1:39.28 rcu_sched
OBSERVAÇÃO: substitua user
pelo seu nome de usuário real.
Usando o comando top
para obter valores de CPU nós , sy , id e si
Semelhante à primeira seção, crie um script bash para fazer um loop de 7.200 segundos:
#!/bin/bash
# NAME: ~/bin/cpu-top-summary
# DATE: June 13, 2017
# DESC: Call 'top' command every second to obtain CPU(s) stats for
# us, sy, ni, id, wa, hi, si, and st. Log to /tmp/top-cpu-summary.log
# with time stamp in hh:mm:ss 24 hour format.
# PARM: number of seconds to run, ie 2 hours = 7200
now="$(date +'%d/%m/%Y')"
printf "top CPU(s) summary for %s\n" "$now" > /tmp/top-cpu-summary.log
for ((i=0; i<; i++))
do
TimeStamp='date +"%H:%M:%S"'
printf "$TimeStamp - " >> /tmp/top-cpu-summary.log
top -n 1 -b | head -n 3 | tail -n 1 >> /tmp/top-cpu-summary.log
sleep 1
done
Quando você chama o script bash usando top-cpu-summary 10
, você pode ver a saída por 10 segundos usando:
$ cat /tmp/top*
top CPU(s) summary for 13/06/2017
19:17:34 - %Cpu(s): 25.0 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
19:17:35 - %Cpu(s): 25.0 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
19:17:36 - %Cpu(s): 25.0 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
19:17:37 - %Cpu(s): 25.0 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
19:17:38 - %Cpu(s): 25.0 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
19:17:39 - %Cpu(s): 25.0 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
19:17:41 - %Cpu(s): 25.0 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
19:17:42 - %Cpu(s): 24.9 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
19:17:43 - %Cpu(s): 24.9 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
19:17:44 - %Cpu(s): 24.9 us, 9.2 sy, 0.0 ni, 65.4 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st