シェルスクリプトで複数のプログラムを実行しました。
./myprogram1
./myprogram2
...
ソースコードを編集して個々のプログラムのそれぞれをプロファイリングできることを知っていますが、スクリプト自体をプロファイリングして合計実行時間を測定する方法があるかどうかを知りたいです。この目的に使用できるタイマープログラムはありますか?それでは、測定値はどのくらい正確ですか?
答え1
まず、時間の使用についてJon Linのアドバイスに従ってください。
$ time ls test
test
real 0m0.004s
user 0m0.002s
sys 0m0.002s
スクリプトがどのUnixで実行されているかはわかりませんでしたが、Linuxでstraceを実行し、Solaris / AIXでtrussを実行すると、hp-uxのtuscがプロセスが何をしているかについて多くを伝えることができると思います。私は良い要約を得るためにstraceの-cオプションが好きです。
]$ strace -c ls
test
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
89.19 0.000998 998 1 execve
10.81 0.000121 121 1 write
0.00 0.000000 0 12 read
0.00 0.000000 0 93 79 open
0.00 0.000000 0 16 close
0.00 0.000000 0 2 1 access
0.00 0.000000 0 3 brk
0.00 0.000000 0 2 ioctl
0.00 0.000000 0 4 munmap
0.00 0.000000 0 1 uname
0.00 0.000000 0 6 mprotect
0.00 0.000000 0 2 rt_sigaction
0.00 0.000000 0 1 rt_sigprocmask
0.00 0.000000 0 1 getrlimit
0.00 0.000000 0 30 mmap2
0.00 0.000000 0 8 7 stat64
0.00 0.000000 0 13 fstat64
0.00 0.000000 0 2 getdents64
0.00 0.000000 0 1 fcntl64
0.00 0.000000 0 1 futex
0.00 0.000000 0 1 set_thread_area
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 1 socket
0.00 0.000000 0 1 1 connect
------ ----------- ----------- --------- --------- ----------------
100.00 0.001119 205 88 total
また、これらのトレースタイプのプログラムを添付すると、プログラムの速度が若干遅くなることがあります。
答え2
確認するtime
注文する。これを使用して、実行にかかる時間と時間がかかる場所など、他の有用な情報を測定できます。
答え3
私はここに2回以上訪れたので、次の解決策を実装しました。
https://github.com/walles/shellprof
スクリプトを実行して、印刷されたすべての行を透過的に記録し、最後に最長行のトップ10のリストを画面に印刷します。
~/s/shellprof (master|✔) $ ./shellprof ./testcase.sh
quick
slow
quick
Timings for printed lines:
1.01s: slow
0.00s: <<<PROGRAM START>>>
0.00s: quick
0.00s: quick
~/s/shellprof (master|✔) $
答え4
time
何度も繰り返し実行
同じコマンドを複数回実行して分析
time (for ((n=0;n<10;n++)); do echo "scale=1000; 4*a(1)" | bc -l; done)
これはecho "scale=1000; 4*a(1)" | bc -l
piを計算し、ループが単一のコマンドで実行されることをtime (...)
保証します。for