Tengo varios programas que estoy ejecutando en un script de shell:
./myprogram1
./myprogram2
...
Sé que puedo perfilar cada programa individual editando el código fuente, pero quería saber si había una manera de medir el tiempo total ejecutado al perfilar el script en sí. ¿Hay un programa de temporizador que pueda usar para este propósito? Si es así, ¿qué tan precisa es su medición?
shell-script
time
profiling
Pablo
fuente
fuente

Respuestas:
Comience usando el tiempo según la sugerencia de Jon Lin:
No dice en qué unix se están ejecutando sus scripts, sino que se ejecuta en Linux, truss en Solaris / AIX, y creo que susc en hp-ux le permiten aprender mucho sobre lo que está haciendo un proceso. Me gusta la opción -c de strace para obtener un buen resumen:
También tenga en cuenta que adjuntar estos programas de tipo de rastreo puede ralentizar un poco el programa.
fuente
Mira el
timecomando . Puede usarlo para medir el tiempo que se tarda en ejecutar junto con otra información útil, como dónde se está gastando el tiempo.fuente
No es exactamente un perfil, pero puede rastrear su script mientras se ejecuta. Poner
set -xvantes de la sección que desea rastrear yset +xvdespués de la sección.set -xhabilita xtrace, que mostrará cada línea que se ejecuta.set -vhabilita el modo detallado, que también mostrará líneas que pueden tener un efecto, pero que no se ejecutan, como la asignación de variables.También puede marcar su rastro en el tiempo. Necesita un emulador de terminal que pueda marcar cada línea; el único que conozco es RealTerm , que es un programa de Windows, pero funcionará con Wine. También puede usarlo
grabserial, aunque no lo he probado, excepto con puertos seriales reales. Puede averiguar qué dispositivo serie está usando su shell ejecutandops -p $$(si no lo hace, usemanpara averiguar cómo incluir la columna TTY en supssalida).Además, consulte Herramientas de creación de perfiles de rendimiento para scripts de shell en Stack Overflow.
fuente
timepor varias iteracionesPerfilado ejecutando el mismo comando varias veces
Donde
echo "scale=1000; 4*a(1)" | bc -lcalcula pi ytime (...)asegura que elforciclo se ejecute como un solo comando.fuente
Como terminé aquí al menos dos veces, implementé una solución:
https://github.com/walles/shellprof
Ejecuta su secuencia de comandos, registra de forma transparente todas las líneas impresas y al final imprime una lista de las 10 líneas principales que estuvieron en pantalla durante más tiempo:
fuente