systemadmin.es > Rendimiento > Resumen de llamadas al sistema con strace

Resumen de llamadas al sistema con strace

Mediante la herramienta strace podemos seguir las llamadas al sistema y las señales recibidas de los procesos. En alguna ocasión nos puede interesar ver el conjunto en lugar de las llamadas individuales para hacernos una idea del conjunto y no de una ejecución concreta.

Para seguir un determinado proceso podemos añadir la opción -p al comando strace, para hacerlo a un conjunto de procesos podemos combinar pgrep con sed:

# pgrep httpd | sed 's/^/-p /g'
-p 13653
-p 13655
-p 13656
(...)

Para obtener el resumen de las llamadas al sistema podemos usar la opción -c:

# strace -c -fF $(pgrep httpd | sed 's/^/-p /g')
Process 12761 attached (waiting for parent)
Process 12761 resumed (parent 21274 ready)
(...)
Process 12775 detached
Process 12776 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 13.81    0.025492           3      7632       911 read
 12.73    0.023495           1     20110       414 stat
 12.23    0.022587           1     16920      3710 access
  9.31    0.017186           2      8272           poll
  6.50    0.012003           3      4250        13 sendto
  6.21    0.011471           1     17182           fstat
  5.30    0.009784         326        30           clone
  4.77    0.008809           1      6371       356 open
  3.28    0.006058           1      5777           munmap
  2.93    0.005415           2      2574           write
  2.59    0.004790           1      6681           close
  2.58    0.004772           1      4817      1243 lstat
  2.50    0.004617           1      5795           mmap
  2.50    0.004613           1      4543           recvfrom
  2.19    0.004049           4      1152         1 writev
  1.79    0.003306           2      1758           sched_yield
  1.37    0.002527           5       540           brk
  0.88    0.001617           5       359         7 shutdown
  0.71    0.001309           7       197           epoll_wait
  0.70    0.001298           5       275           setitimer
  0.67    0.001238           3       377           socket
  0.65    0.001203           3       394           semop
  0.64    0.001178           2       539           times
  0.51    0.000939           3       314       314 connect
  0.46    0.000857           4       197           accept
  0.44    0.000809           0      2783           fcntl
  0.37    0.000676           1       687           getcwd
  0.35    0.000639           0      1418           rt_sigaction
  0.27    0.000490           1       342           getsockname
  0.16    0.000296          42         7           wait4
  0.15    0.000285           0      1024           setsockopt
  0.13    0.000245           8        30           setgroups
  0.12    0.000226           2        94           rt_sigprocmask
  0.10    0.000182           5        38           lseek
  0.05    0.000099           2        60           epoll_ctl
  0.03    0.000064           1        60           geteuid
  0.00    0.000000           0         8         2 select
  0.00    0.000000           0         3           mremap
  0.00    0.000000           0         7           sendfile
  0.00    0.000000           0       150           recvmsg
  0.00    0.000000           0        50           bind
  0.00    0.000000           0       150           getsockopt
  0.00    0.000000           0       182           chdir
  0.00    0.000000           0        30           setuid
  0.00    0.000000           0        30           setgid
  0.00    0.000000           0         2           getpgrp
  0.00    0.000000           0        13           futex
  0.00    0.000000           0        30           epoll_create
------ ----------- ----------- --------- --------- ----------------
100.00    0.184624                124254      6971 total

Por defecto se ordenan por tiempo (time), pero lo podemos ordenar por otros criterios con la opción -S como llamadas (calls), nombre (name) o simplemente nada (nothing), según aparecen en los procesos aparecen en la lista:

# strace -c -S calls -fF $(pgrep httpd | sed 's/^/-p /g')
(...)
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 12.65    0.025514           1     20845       455 stat
  5.05    0.010180           1     18378           fstat
 11.28    0.022766           1     17054      3862 access
 12.34    0.024894           3      9654           poll
 12.44    0.025098           3      8430       978 read
  3.16    0.006383           1      7121           close
  5.95    0.012009           2      6913       437 open
  4.39    0.008854           1      6401      1343 lstat
  2.45    0.004934           1      6289           mmap
  2.51    0.005061           1      6237           munmap
  2.52    0.005077           1      4767           recvfrom
  5.52    0.011127           3      4300         8 sendto
  4.22    0.008523           2      3675           write
  0.89    0.001805           1      3191           fcntl
  1.10    0.002229           2      1422           sched_yield
  2.94    0.005933           4      1421         2 writev
  0.65    0.001303           1      1405           rt_sigaction
  1.40    0.002834           2      1164           setsockopt
  0.16    0.000327           0       733           getcwd
  0.28    0.000565           1       661           brk
  0.61    0.001236           2       570           times
  1.12    0.002264           5       489           socket
  0.57    0.001153           3       420           semop
  0.00    0.000000           0       417           getsockname
  0.49    0.000998           3       379       379 connect
  1.45    0.002922           8       371         8 shutdown
  0.06    0.000128           0       290           setitimer
  0.00    0.000000           0       258           recvmsg
  0.39    0.000778           4       210           accept
  0.99    0.001998          10       210           epoll_wait
  0.00    0.000000           0       199           getsockopt
  0.00    0.000000           0       196           chdir
  0.00    0.000000           0       106           rt_sigprocmask
  0.00    0.000000           0        86           bind
  0.00    0.000000           0        20           futex
  0.00    0.000000           0        17           mprotect
  0.00    0.000000           0        16           sendfile
  1.84    0.003705         285        13           wait4
  0.00    0.000000           0        12         6 select
  0.00    0.000000           0         9           lseek
  0.08    0.000164          23         7           getpgrp
  0.00    0.000000           0         5           uname
  0.00    0.000000           0         4           execve
  0.00    0.000000           0         4           arch_prctl
  0.00    0.000000           0         3           pipe
  0.00    0.000000           0         2           getpid
  0.00    0.000000           0         2           fsync
  0.00    0.000000           0         2           link
  0.00    0.000000           0         2           getuid
  0.00    0.000000           0         1         1 ioctl
  0.00    0.000000           0         1           dup2
  0.00    0.000000           0         1           nanosleep
  0.00    0.000000           0         1           alarm
  0.49    0.000981         981         1           clone
  0.00    0.000000           0         1           vfork
  0.00    0.000000           0         1           unlink
  0.00    0.000000           0         1           umask
  0.00    0.000000           0         1           getgid
  0.00    0.000000           0         1           geteuid
  0.00    0.000000           0         1           getegid
  0.00    0.000000           0         1           getppid
------ ----------- ----------- --------- --------- ----------------
100.00    0.201743                134392      7479 total

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>