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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top