sleep()에 소요된 총 누적 시간을 측정하는 방법은 무엇입니까?

sleep()에 소요된 총 누적 시간을 측정하는 방법은 무엇입니까?

Bash와 Python으로 작성된 도구를 분석하고 있습니다. 최상위 수준의 호출은 bash 및 Python 프로그램의 여러 계층을 트래버스합니다. 완료 시간은 약 시간(4~5시간)입니다. 이 미로 같은 호출에는 sleep()여러 파일/프로그램에 걸쳐 많은 호출이 분산되어 있습니다. 잠자는 시간은 장소에 따라 다릅니다. 도구는단일 스레드.

foo.sh 및 bar.sh를 호출하는 main.sh의 예. 실제 도구에는 더 많은 파일이 있고 각 파일의 크기가 크며 sleep()모든 파일(foo.sh, bar.sh)을 .change 호출하는 것은 불가능합니다. 이상적으로는 main.sh에 뭔가를 추가하고 싶습니다.

# main.sh
foo.sh
for (something):
  bar.sh    

# foo.sh
<stuff>
sleep 10
<stuff>
sleep 30
bar.sh
<stuff>
compute.py arg1 arg2

# bar.sh
<stuff>
while (something): 
  sleep 15
<stuff>

에서 보낸 총 시간을 알고 싶습니다 sleep().

sleep()도구 시작부터 완료까지 소요된 총 시간을 확인할 수 있는 방법이 있습니까 ?

그 외에도 도움이 될 수 있다고 생각하는 제안이나 지침이 있나요? bash나 Python에서만 작동하는 방법이 있나요?

답변1

한 가지 옵션은 다음과 같은 것을 사용하는 것입니다.sysdig. 다음과 같은 쉘 스크립트가 있는 경우:

#!/bin/bash

for ((i = 0; i < 10; ++i)); do
    sleep $((i + 5))
done

다음과 같이 실행할 수 있습니다.

ex.sh& sudo sysdig proc.ppid=$! and evt.type=nanosleep and evt.dir='>'
[1] 34548
5578 19:12:08.307269713 4 sleep (34550) > nanosleep interval=6000000000(6s)
19206 19:12:14.308052173 0 sleep (34559) > nanosleep interval=7000000000(7s)
30764 19:12:21.308769638 4 sleep (34560) > nanosleep interval=8000000000(8s)
44222 19:12:29.309508180 0 sleep (34561) > nanosleep interval=9000000000(9s)
62699 19:12:38.310298027 4 sleep (34569) > nanosleep interval=10000000000(10s)
79052 19:12:48.311058659 0 sleep (34570) > nanosleep interval=11000000000(11s)
100582 19:12:59.311839491 4 sleep (34578) > nanosleep interval=12000000000(12s)
123807 19:13:11.312590028 0 sleep (34586) > nanosleep interval=13000000000(13s)
145141 19:13:24.313375302 4 sleep (34587) > nanosleep interval=14000000000(14s)

여기서는 부모가 시스템 호출( )을 proc.ppid=$!호출하는 백그라운드 스크립트()에 있는 프로세스 , 즉 시스템 호출 항목 이벤트( )를 찾고 있습니다 . 스크립트는 호출을 먼저 생각하므로 결국 첫 번째 이벤트가 누락됩니다.nanosleepevt.type=nanosleepevt.dir='>'sleep

이 도구에는 다양한 필터링 옵션이 있으며 세부 정보를 볼 수 있습니다.사용자 설명서. 사용 사례에 맞게 필터를 조정해야 할 수도 있습니다. 예를 들어, sleep수면에 대한 특정 시스템 호출을 찾으려면 몇 가지 실험이 필요했습니다 .

관련 정보