CPU captura e uso de memória dinamicamente
-
03-07-2019 - |
Pergunta
Estou executando um script shell para executar um aplicativo c ++, que mede o desempenho de uma api. i pode capturar a latência (tempo necessário para retornar um valor para um determinado conjunto de parâmetros) da API, mas eu também gostaria de capturar o uso de CPU e memória junto com intervalos de, digamos, 5-10 segundos.
existe uma maneira de fazer isso sem afetar o desempenho do sistema muito e que também dentro do mesmo script? eu encontrei muitos exemplos onde se pode fazer fora (independentemente) do script que está sendo executado; mas não aquele em que podemos fazer dentro do mesmo script.
Solução
Eu sugiro usar o comando ' tempo ' e também ' vmstat ' comando. O primeiro dará uso da CPU de execução executável e segunda -. Periódica (ou seja, uma vez por segundo) despejo de CPU / memória / IO do sistema
Exemplo:
time dd if=/dev/zero bs=1K of=/dev/null count=1024000
1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 0.738194 seconds, 1.4 GB/s
0.218u 0.519s 0:00.73 98.6% 0+0k 0+0io 0pf+0w <== that's time result
Outras dicas
Se você estiver olhando para a captura de utilização de CPU e Mem de forma dinâmica para toda caixa de linux, então seguinte comando pode ajudá-lo também:
CPU
vmstat -n 15 10| awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> CPUDataDump.csv &
vmstat
é usado para a coleta de contadores de CPU
-n
para valor de atraso, neste caso, é 15, isso significa que após cada 15 segundos, serão recolhidas estatísticas.
então 10
é o número de intervalos, haveria 10 iterações neste exemplo
awk '{now=strftime("%Y-%m-%d %T "); print now $0}'
isso irá despejar o timestamp de cada iteração
No final, o arquivo de despejo com &
para a continuação
Memória
free -m -s 10 10 | awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> DataDumpMemoryfile.csv &
free
é para mem estatísticas coleção
-m
isto é para unidades de mem (você pode usar -b
para bytes, -k
para kilobytes, -g
de gigabytes)
então 10
é o número de intervalos (haveria 10 iterações neste exemplo)
awk'{now=strftime("%Y-%m-%d %T "); print now $0}'
isso irá despejar o timestamp de cada iteração
No final, o &
despejo para a continuação