Eu tenho vários programas que estou executando em um script de shell:
./myprogram1
./myprogram2
...
Sei que posso criar um perfil de cada programa individual editando o código-fonte, mas queria saber se havia uma maneira de medir o tempo total executado, criando o perfil do próprio script. Existe um programa de timer que eu possa usar para esse fim? Se sim, qual a precisão da sua medição?
shell-script
time
profiling
Paulo
fonte
fonte
Respostas:
Comece usando o tempo conforme a sugestão de Jon Lin:
Você não diz em que unix seus scripts estão rodando, mas sim no linux, truss no Solaris / AIX, e acho que o tusc no hp-ux permite que você aprenda muito sobre o que um processo está fazendo. Eu gosto da opção -c do strace para obter um bom resumo:
Observe também que anexar esses programas do tipo rastreamento pode atrasar um pouco o programa.
fonte
Confira o
time
comando . Você pode usá-lo para medir o tempo necessário para executar, juntamente com outras informações úteis, como onde o tempo está sendo gasto.fonte
Não é exatamente o perfil, mas você pode rastrear seu script enquanto ele é executado. Coloque
set -xv
antes da seção que deseja rastrear eset +xv
depois da seção.set -x
ativa o xtrace, que mostrará todas as linhas que são executadas.set -v
ativa o modo detalhado, que também mostrará linhas que podem ter efeito, mas não são executadas, como atribuição de variável.Você também pode registrar o carimbo de data e hora. Você precisa de um emulador de terminal que possa registrar o carimbo de data / hora em todas as linhas; o único que eu conheço é o RealTerm , que é um programa do Windows, mas funcionará com o Wine. Você também pode usar
grabserial
, embora eu não tenha tentado, exceto com portas seriais reais. Você pode descobrir qual dispositivo serial seu shell está usando executandops -p $$
(caso contrário, useman
para descobrir como incluir a coluna TTY na suaps
saída).Além disso, consulte Ferramentas de perfil de desempenho para scripts de shell no Stack Overflow.
fonte
time
para várias iteraçõesCriação de perfil executando o mesmo comando várias vezes
Onde
echo "scale=1000; 4*a(1)" | bc -l
calcula pi etime (...)
garante que ofor
loop seja executado como um único comando.fonte
Desde que acabei aqui pelo menos duas vezes agora, implementei uma solução:
https://github.com/walles/shellprof
Ele executa seu script, mostra de forma transparente todas as linhas impressas e, no final, imprime uma lista das 10 principais das linhas que estavam mais longas na tela:
fonte