como salvar logs da CPU ou valores de uso da GPU?

2

pessoal!

Eu quero verificar meus logs da CPU continuamente. Eu usei os comandos top e htop. Mas eu só os vejo durante as simulações.

Agora, quero usar um ROBÔ real por aproximadamente duas horas (meu laptop estaria no ROBÔ enquanto estiver em movimento).

Então, como posso salvar todos os registros em um arquivo de log para acessá-lo mais tarde?

Em segundo lugar, também verifiquei o desempenho da GPU (placa gráfica AMD). Mas como posso criar um arquivo de log?

    
por Farzan M. Ñóòrî 10.06.2017 / 02:33

2 respostas

2

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
    
por WinEunuuchs2Unix 10.06.2017 / 04:22
1

Em vez de escrever scripts, você pode usar o collectl e talvez combinar isso com grafite e grafana para visualizar os resultados.

Do site da coleção:

  

Há um número de vezes em que você está precisando   dados de desempenho. Estes podem incluir benchmarking, monitoramento de   saúde geral do sistema ou tentando determinar o que seu sistema era   fazendo em algum momento no passado. Dependendo do que você está fazendo, você   muitas vezes acabam usando ferramentas diferentes, cada uma projetada para   situação.

     

Diferentemente da maioria das ferramentas de monitoramento que se concentram em um pequeno conjunto de   estatísticas, formate sua saída de uma única maneira, execute   interativamente ou como um daemon mas não ambos, o collectl tenta fazer tudo.   Você pode optar por monitorar qualquer um dos amplos conjuntos de subsistemas que   atualmente incluem buddyinfo, cpu, disco, inodes, infiniband, lustre,   memória, rede, nfs, processos, quádricas, lajes, soquetes e tcp.

     

A saída Collectl também pode ser salva em um conjunto contínuo de logs para mais tarde   reprodução ou exibido interativamente em uma variedade de formatos. Eu cai   isso não é o suficiente, existem plugins que permitem relatar dados em   formatos alternativos ou até enviá-los por um soquete para ferramentas remotas como   como gânglios ou grafite. Você pode até criar arquivos em espaços separados   formato para plotagem com pacotes externos como o gnuplot.

    
por nickcrabtree 10.06.2017 / 10:00