É melhor usar algo parecido com o comando time .
Bash também possui time embutido, o que estou sugerindo é usar time binário localizado em: /usr/bin/time .
Para um tempo de execução:
command time -f "\nElapsed: %E \nUser: %U \nSystem: %S \nMemory: %M\n" \
./MyCommand 1> /dev/null
Quais resultados:
Elapsed: 0:00.01
User: 0.00
System: 0.00
Memory: 2412
-
command: força o bash a usar/usr/bin/timeem vez detimeinterno.
Você pode usar time com um loop para obter uma "avrage", "min", "max" de um recurso específico como memória:
Este código executará ./COMMAND comandos 1000 vezes e, em seguida, imprimirá o "min, max, avg" de seu uso de memória total (dados + pilha + texto).
#/bin/bash
tmpfile='mktemp'
for i in {1..1000}; do command time -ao $tmpfile -f "%K" ./COMMAND 1>/dev/null; done;
awk 'NR == 1 {min = $0} $0 > max {max = $0} {total += $0} END {print total/NR, min, max}' $tmpfile
rm $tmpfile
Aqui está a saída:
2436.89 2524 2324
Você pode alterar %K com:
-
%E: tempo real decorrido -
%I: Número de entradas de arquivo -
%P: Porcentagem da CPU que esse trabalho recebeu -
%k: Número de sinais entregues ao processo -
%U: uso da CPU no modo de usuário -
%S: uso da CPU no modo kernel
veja man time
Obrigado ao muru por escrever uma declaração awk mais clara.