웹 성능 테스트 (각 파일에 소요되는 시간을 확인)를 계획하고 있지만 모든 응용 프로그램에 유용 할 수 있습니다.
나는 존재와 다른 성능 응용 프로그램을 사용하는 방법을 정확히 알고 있으므로 strace 솔루션에만 관심이 있습니다.
기본적으로 필터링 된 syscall의 시간 실행 차이를 계산 한 다음 그룹화하고 정렬하고 요약을 생성합니다 (-C 옵션과 유사).
사용 예 :
$ strace -ttt -s1500 -o/dev/stdout -e trace=open,access sleep 1 | awk '{print $1 " " $2}'
$ strace -ttt -s1500 -s/dev/stdout -e trace=access drush ev '' | awk '{print $1 " " $2}'
(some example output)
1344416787.291395 execve("/bin/sleep",
1344416787.291796 brk(0)
1344416787.291879 access("/etc/ld.so.nohwcap",
1344416787.291960 mmap(NULL,
1344416787.292026 access("/etc/ld.so.preload",
1344416787.292089 open("/etc/ld.so.cache",
...
1344416787.294428 nanosleep({1,
1344416788.294726 close(1)
1344416788.294814 close(2)
1344416788.294906 exit_group(0)
그런 다음 위의 출력에서 마지막 인쇄 통화 간의 시간 차이 (인간 형식)를 계산하고 싶습니다.
Pseudo code:
echo "1344416788.294906 1344416788.294814" | awk '{print $2 - $1}'
0.00101089
힌트 : strace에서는 -t, -tt 또는 -ttt와 같은 다른 형식을 사용할 수 있습니다 (파싱하기 쉬운 것을 사용할 수 있음).
그런 다음 목록을 생성하십시오 (예 : 헤더없이 sort, uniq 등 사용).
seconds syscall
------ -----------
0.001580 close(2)
0.000132 close(1)
0.000032 exit_group(0)
0.000022 access("/etc/ld.so.preload",
0.000012 access("/etc/ld.so.cache",
syscall 이름으로 만 그룹화하지 말고 전체 구 ($ 2)로 그룹화하십시오.
가능한 한 쉬워야합니다. 하나의 라이너가 있다면 그것을보고 싶습니다. 감사.
추신 당신이 무의미하다고 생각되면 무시하십시오.
-
관련 주제 (일부 아이디어에 유용 할 수 있음) :
두 문자열에서 두 숫자를 추출하고 Bash의 차이를 계산하는 방법은 무엇입니까?
http://www.unix.com/shell-programming-scripting/121053-sum-value-selected-lines-script-awk-perl.html
http://unstableme.blogspot.ch/2009/12/sum-numbers-in-each-row-awk.html
http://www.unix.com/shell-programming-scripting/157047-awk-compare-previous-value-current.html