Eu acho que strace com o sinal -c
é provavelmente o mais próximo que eu sei. Se você não usou o sinalizador -c
, tente o seguinte:
$ sudo strace -c -p 12345
Em que 12345 é o ID do processo (PID) do processo em questão. Observe que o stracing de um processo adiciona uma sobrecarga adicional, portanto, enquanto você estiver rastreando, o processo será executado mais lentamente.
Depois de executar isso por quanto tempo você quiser coletar dados, pressione Ctrl-C
para interromper a coleta de dados e gerar os resultados. Isso produzirá algo assim:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
31.88 0.001738 145 12 futex
16.79 0.000915 11 80 tgkill
12.36 0.000674 34 20 read
9.76 0.000532 266 2 statfs
8.42 0.000459 13 35 time
4.38 0.000239 6 40 gettimeofday
3.65 0.000199 4 48 sigprocmask
2.94 0.000160 18 9 open
2.88 0.000157 12 13 stat64
1.32 0.000072 9 8 munmap
0.90 0.000049 6 8 mmap2
0.88 0.000048 3 14 7 sigreturn
0.79 0.000043 5 9 close
0.77 0.000042 4 10 rt_sigprocmask
0.64 0.000035 3 12 setitimer
0.55 0.000030 5 6 6 rt_sigsuspend
0.53 0.000029 4 8 fstat64
0.29 0.000016 8 2 setresuid32
0.13 0.000007 4 2 _llseek
0.09 0.000005 3 2 prctl
0.04 0.000002 2 1 geteuid32
------ ----------- ----------- --------- --------- ----------------
100.00 0.005451 341 13 total
Como você pode ver, este é um detalhamento de todas as chamadas do sistema feitas pelo aplicativo, classificadas pelo tempo total e incluindo o tempo médio por chamada e número de chamadas para cada syscall. Se você quiser classificá-los de forma diferente, veja a man page para strace, pois há algumas opções.