É 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/time
em vez detime
interno.
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.