Pregunta

Estoy ejecutando un script de shell para ejecutar una aplicación c ++, que mide el rendimiento de una api. Puedo capturar la latencia (el tiempo que se tarda en devolver un valor para un conjunto dado de parámetros) de la API, pero también deseo capturar el uso de la CPU y la memoria junto con intervalos de, por ejemplo, 5-10 segundos.

¿hay una manera de hacer esto sin afectar demasiado el rendimiento del sistema y eso también dentro del mismo script? He encontrado muchos ejemplos donde uno puede hacer fuera (independientemente) del script que estamos ejecutando; pero no uno donde podamos hacerlo dentro del mismo script.

¿Fue útil?

Solución

Sugiero usar el comando ' time ' y también el comando ' vmstat '. El primero le dará a la CPU el uso de la ejecución ejecutable y el segundo volcado periódico (es decir, una vez por segundo) de la CPU / memoria / IO del sistema.

Ejemplo:

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

Otros consejos

Si está buscando capturar la CPU y la utilización de Mem dinámicamente para toda la caja de Linux, el siguiente comando también puede ayudarlo:

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 se utiliza para la recopilación de contadores de CPU

-n para el valor de retardo, en este caso es 15, lo que significa que después de cada 15 segundos, se recopilarán las estadísticas.

entonces 10 es el número de intervalos, en este ejemplo habría 10 iteraciones

awk '{now = strftime ("% Y-% m-% d% T "); imprima ahora $ 0} ' esto borrará la marca de tiempo de cada iteración

al final, el archivo de volcado con & amp; para continuar

Memoria

<*>

free es para la recopilación de estadísticas mem

-m esto es para unidades de mem (puede usar -b para bytes, -k para kilobytes, - g para gigabytes)

entonces 10 es el número de intervalos (en este ejemplo habría 10 iteraciones)

awk '{now = strftime ("% Y-% m-% d% T "); imprima ahora $ 0} ' esto borrará la marca de tiempo de cada iteración

al final, el volcado & amp; para continuar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top