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
time
comando . 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 -xv
antes de la sección que desea rastrear yset +xv
después de la sección.set -x
habilita xtrace, que mostrará cada línea que se ejecuta.set -v
habilita 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, useman
para averiguar cómo incluir la columna TTY en sups
salida).Además, consulte Herramientas de creación de perfiles de rendimiento para scripts de shell en Stack Overflow.
fuente
time
por varias iteracionesPerfilado ejecutando el mismo comando varias veces
Donde
echo "scale=1000; 4*a(1)" | bc -l
calcula pi ytime (...)
asegura que elfor
ciclo 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