Mam kilka programów, które uruchamiam w skrypcie powłoki:
./myprogram1
./myprogram2
...
Wiem, że mogę profilować każdy program, edytując kod źródłowy, ale chciałem wiedzieć, czy istnieje sposób, aby zmierzyć całkowity czas wykonywany przez profilowanie samego skryptu. Czy istnieje program czasowy, którego można użyć do tego celu? Jeśli tak, to jak dokładny jest jego pomiar?
shell-script
time
profiling
Paweł
źródło
źródło
Odpowiedzi:
Zacznij od wykorzystania czasu zgodnie z sugestią Jona Lin:
Nie mówisz, na jakim uniksie działają twoje skrypty, ale strace na Linuksie, truss na Solaris / AIX, i myślę, że tusc na hp-ux pozwala ci wiele dowiedzieć się o tym, co robi proces. Podoba mi się opcja strace -c, aby uzyskać ładne podsumowanie:
Należy również pamiętać, że dołączenie tych programów typu śledzenia może nieco spowolnić program.
źródło
Sprawdź
time
polecenie . Możesz go użyć do pomiaru czasu potrzebnego do wykonania wraz z innymi przydatnymi informacjami, takimi jak miejsce spędzania czasu.źródło
Nie jest to dokładnie profilowanie, ale można śledzić skrypt podczas jego działania. Umieść
set -xv
przed sekcją, którą chcesz śledzić, iset +xv
za sekcją.set -x
włącza xtrace, który pokaże każdą wykonaną linię.set -v
włącza tryb gadatliwy, który pokaże również linie, które mogą mieć efekt, ale nie są wykonywane, takie jak przypisanie zmiennych.Możesz także datownikować swój ślad. Potrzebujesz emulatora terminala, który może sygnalizować czasowo każdą linię; Jedyne, o czym wiem, to RealTerm , który jest programem Windows, ale będzie działał z Wine. Możesz także być w stanie używać
grabserial
, chociaż nie próbowałem tego, z wyjątkiem prawdziwych portów szeregowych. Możesz dowiedzieć się, z jakiego urządzenia szeregowego korzysta twoja powłoka, uruchamiającps -p $$
(jeśli nie, użyj,man
aby dowiedzieć się, jak dołączyć kolumnę TTY do swoichps
wyników).Zobacz także Narzędzia do profilowania wydajności dla skryptów powłoki w przepełnieniu stosu.
źródło
time
przez kilka iteracjiProfilowanie poprzez wielokrotne uruchomienie tego samego polecenia
Gdzie
echo "scale=1000; 4*a(1)" | bc -l
oblicza pi itime (...)
zapewnia, żefor
pętla działa jako pojedyncze polecenie.źródło
Ponieważ znalazłem się tutaj przynajmniej dwa razy, wdrożyłem rozwiązanie:
https://github.com/walles/shellprof
Uruchamia skrypt, transparentnie taktuje wszystkie wydrukowane linie, a na końcu drukuje listę 10 najlepszych linii, które były najdłuższe na ekranie:
źródło