쉘 스크립트를 분석하는 방법은 무엇입니까?

쉘 스크립트를 분석하는 방법은 무엇입니까?

쉘 스크립트에서 여러 프로그램을 실행했습니다.

./myprogram1
./myprogram2
...

소스 코드를 편집하여 개별 프로그램 각각을 프로파일링할 수 있다는 것을 알고 있지만, 스크립트 자체를 프로파일링하여 총 실행 시간을 측정할 수 있는 방법이 있는지 알고 싶습니다. 이 목적으로 사용할 수 있는 타이머 프로그램이 있습니까? 그렇다면 측정값은 얼마나 정확합니까?

답변1

먼저 시간 사용에 대한 Jon Lin의 조언을 따르세요.

$ time ls test
test

real    0m0.004s
user    0m0.002s
sys     0m0.002s

스크립트가 어떤 유닉스에서 실행되는지는 밝히지 않았지만 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

저는 여기에 두 번 이상 방문했기 때문에 다음과 같은 솔루션을 구현했습니다.

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 -lpi를 계산하고 루프가 단일 명령으로 실행되도록 time (...)보장합니다 .for

관련 정보