Decodifica / resume os registros de strace

4

OK, então não é segredo que strace produz vastas quantidades de saída. (Eu estou ciente de que existem várias opções para filtrar um pouco a saída).

Existe alguma ferramenta para processar um log strace bruto em algo mais legível?

Que tipo de "decodificação" estou procurando? Bem, por design strace funciona em um nível muito baixo. Eu estou procurando por algo que possa resumir os pontos mais importantes. Por exemplo, o FD 4 pode apontar para arquivos diferentes em instantes diferentes; seria útil ter a máquina para acompanhar isso, ao invés de mim. Idem para PIDs. Eu gostaria de poder ver as árvores de processo em diferentes momentos no rastreamento e assim por diante. Uma ferramenta GUI seria ótima, mas mesmo algo baseado em texto seria aceitável se tornasse as coisas mais fáceis de seguir.

    
por MathematicalOrchid 26.11.2014 / 16:38

1 resposta

2

Resumo enquanto a cadeia é executada

strace tem a opção -c , que fornecerá um relatório de resumo das várias chamadas de sistema feitas.

página do homem strace do trecho
-c      Count time, calls, and errors for each system call and report a 
        summary on program exit.  On Linux, this attempts to show system 
        time (CPU  time  spent  running in the kernel) independent of wall 
        clock time.  If -c is used with -f or -F (below), only aggregate 
        totals for all traced processes are kept.

Exemplo

$ strace -c systemctl list-unit-files --type=service
...
...
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 51.81    0.001831        1831         1           waitid
  8.15    0.000288           7        39           mmap
  7.89    0.000279          19        15           read
  6.11    0.000216           8        26           mprotect
  4.56    0.000161          11        15           open
  2.91    0.000103         103         1           connect
  2.24    0.000079          79         1           clone
  2.15    0.000076          38         2           statfs
  2.01    0.000071           4        19           close
  1.95    0.000069           5        13           poll
  1.90    0.000067           5        14         2 recvmsg
  1.70    0.000060           4        16           fstat
  0.88    0.000031           8         4         3 stat
  0.82    0.000029          29         1           socket
  0.65    0.000023           8         3           munmap
  0.57    0.000020           5         4           sendto
  0.42    0.000015           5         3           ioctl
  0.40    0.000014           7         2           lstat
  0.40    0.000014           7         2           sendmsg
  0.34    0.000012           4         3           brk
  0.23    0.000008           8         1           pipe
  0.23    0.000008           4         2           fcntl
  0.20    0.000007           4         2           rt_sigaction
  0.20    0.000007           7         1         1 access
  0.20    0.000007           4         2           geteuid
  0.17    0.000006           6         1           execve
  0.14    0.000005           5         1           getsockname
  0.11    0.000004           4         1           dup2
  0.11    0.000004           4         1           getresuid
  0.11    0.000004           4         1           getresgid
  0.11    0.000004           4         1           arch_prctl
  0.08    0.000003           3         1           rt_sigprocmask
  0.08    0.000003           3         1           getrlimit
  0.08    0.000003           3         1           set_tid_address
  0.08    0.000003           3         1           set_robust_list
  0.00    0.000000           0         4           write
  0.00    0.000000           0         1           kill
------ ----------- ----------- --------- --------- ----------------
100.00    0.003534                   207         6 total

Analisando registros de strings postmortem

Eu encontrei esses scripts em Perl chamados Strace_analyzer.pl que parecem com o que você está procurando.

Uso
$ ./strace_analyzer_ng_0.03.pl -help
Usage: strace-analyze [OPTION]… [FILE]
Analyzes strace output for IO functions. It creates statistics
on IO functions and performance of the read and write functions.
The strace file should have been run with ‘strace -tt [PROGRAM]

Há um exemplo da saída na página que eu fiz o link acima. É muito longo para postar aqui. Eu também postei aqui no pastebin.com.

Alternativa para strace, ioapps

Me deparei com este aplicativo chamado ioapps que pode fornecer uma análise mais detalhada do que seu aplicativo está funcionando quando está em execução. Talvez isso possa ser melhor para o que você está tentando realizar do que processar strace logs.

Uso
  $ ioprofiler-trace thunderbird

Once it loads, we just close the thunderbird window and check we have a trace log called "ioproftrace.log" because that's the default name of the log (one can specify another name using -o command line option):

  $ ls -l ioproftrace.log 
  -rw-r--r-- 1 user user 74890554 Apr  4 22:04 ioproftrace.log

It seems OK, so we can run ioprofiler over it:

  $ ioprofiler ioproftrace.log 
Exemplo de GUI

Outraalternativaparastrace,strace+

OBSERVAÇÃO:oprojeto strace + não é mais mantido, e, de fato, muitos de seus recursos foram mesclados no padrão strace por meio da opção -k . Portanto, convém garantir que sua versão de strace seja pelo menos até 4,9, que é quando essa opção foi mesclada.

página do homem strace do trecho
-k          Print the execution stack trace of the traced processes after 
            each system call (experimental).
trecho da página do projeto + strace

strace+ is an improved version of strace that collects stack traces associated with each system call. Since system calls require an expensive user-kernel context switch, they are often sources of performance bottlenecks. strace+ allows programmers to do more detailed system call profiling and determine, say, which call sites led to costly syscalls and thus have potential for optimization.

    
por 26.11.2014 / 17:02

Tags