Domanda

Sto eseguendo uno script di shell per eseguire un'applicazione c ++, che misura le prestazioni di un API. posso catturare la latenza (tempo impiegato per restituire un valore per un determinato set di parametri) dell'API, ma desidero anche catturare l'utilizzo della CPU e della memoria a intervalli di 5-10 secondi.

c'è un modo per farlo senza influenzare troppo le prestazioni del sistema e anche quello all'interno dello stesso script? ho trovato molti esempi in cui si può fare al di fuori (indipendentemente) dello script che stiamo eseguendo; ma non uno in cui possiamo fare all'interno dello stesso script.

È stato utile?

Soluzione

Suggerirei di usare il comando time 'e anche il comando vmstat '. Il primo fornirà l'utilizzo della CPU dell'esecuzione eseguibile e il secondo - periodico (ovvero una volta al secondo) dump della CPU / memoria / IO del sistema.

Esempio:

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

Altri suggerimenti

Se stai cercando di catturare dinamicamente l'utilizzo di CPU e Mem per l'intero box di Linux, anche il seguente comando può aiutarti:

CPU

vmstat -n 15 10| awk '{now=strftime("%Y-%m-%d %T "); print now 
free -m -s 10 10 | awk '{now=strftime("%Y-%m-%d %T "); print now <*>}'> DataDumpMemoryfile.csv &
}'> CPUDataDump.csv &

vmstat viene utilizzato per la raccolta di contatori CPU

-n per valore di ritardo, in questo caso è 15, ciò significa che dopo ogni 15 secondi verranno raccolte le statistiche.

allora 10 è il numero di intervalli, in questo esempio ci sarebbero 10 iterazioni

awk '{now = strftime ("% Y-% m-% d% T "); stampa ora $ 0} ' questo scaricherà il timestamp di ogni iterazione

alla fine, il file di dump con & amp; per la continuazione

Memory

<*>

gratuito è per la raccolta di statistiche mem

-m è per unità di mem (puoi usare -b per byte, -k per kilobyte, - g per gigabyte)

quindi 10 è il numero di intervalli (in questo esempio ci sarebbero 10 iterazioni)

awk '{now = strftime ("% Y-% m-% d% T "); stampa ora $ 0} ' questo scaricherà il timestamp di ogni iterazione

alla fine, il dump & amp; per la continuazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top