Как использовать strace только для показа вызовов, которые занимают много времени?

есть ли способ grep только для вызовов, которые в течение определенного времени?

1 ответов


похоже, что есть флаг, который показывает время процессора на выходе (-c):

человек strace

пример вывода:

sysadm@brownie:~$ strace -c ./crypt_crack.py
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 84.38    0.000027           0       340       273 open
 15.63    0.000005           0        67           rt_sigaction
  0.00    0.000000           0        91           read
  0.00    0.000000           0        67           close
  0.00    0.000000           0       117        89 stat
  0.00    0.000000           0        96           fstat
  0.00    0.000000           0         1           lstat
  0.00    0.000000           0         3           lseek
  0.00    0.000000           0        64           mmap
  0.00    0.000000           0        17           mprotect
  0.00    0.000000           0        30           munmap
  0.00    0.000000           0         8           brk
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         4         2 ioctl
  0.00    0.000000           0         1         1 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           uname
  0.00    0.000000           0         2           fcntl
  0.00    0.000000           0         4           getdents
  0.00    0.000000           0         1           getcwd
  0.00    0.000000           0         1         1 readlink
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0         2           futex
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00    0.000032                   923       366 total

sysadm@brownie:~$

при запуске с -c флаг, strace, похоже, удерживает все выходные данные до завершения выполнения (изящно или ctrl-c)

и awk искать время процессора == 0.0:

sysadm@brownie:~$ strace -c ls -la 2>&1 | awk '{if ( == 0.0) print;}'
  0.00    0.000000           0        23           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0        34        12 open
  0.00    0.000000           0        27           close
  0.00    0.000000           0        34           stat
  0.00    0.000000           0        23           fstat
  0.00    0.000000           0        34           lstat
  0.00    0.000000           0         1           lseek
  0.00    0.000000           0        41           mmap
  0.00    0.000000           0        12           munmap
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         2           rt_sigaction
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         2         2 ioctl
  0.00    0.000000           0         2         1 access
  0.00    0.000000           0         4           socket
  0.00    0.000000           0         4         4 connect
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           uname
  0.00    0.000000           0        13           fcntl
  0.00    0.000000           0         2           getdents
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0        67        67 getxattr
  0.00    0.000000           0         1           futex
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           clock_gettime
  0.00    0.000000           0         1           set_robust_list
sysadm@brownie:~$