收集和总结`strace`命令的统计数据?

时间:2017-06-23 08:31:31

标签: linux bash shell operating-system sh

我知道我可以运行strace -c ls来收集ls可执行文件的系统调用统计信息。但是,我想在不同的可执行文件上运行命令strace -c {some executable here} mulitiple次,合并各个结果,然后写入单个文件。

我想合并'系统调用'和#39;来电列。例如,如果ls进行了19次mmap系统调用而tr进行了11次mmap次系统调用,我想合并这些结果,以便最终的统计数据只显示30 mmap系统在某个文件中调用整体。此外,如果系统调用仅出现在一个可执行文件中,它仍应包含在最终结果中。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

使用<uib-accordion close-others="true" style="white-space: nowrap; display: inline-block; vertical-align: top;"> <div uib-accordion-group class="panel-default"> <uib-accordion-heading> <div ng-click="testing()"> My nodes <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': dir.isHeaderOpen, 'glyphicon-chevron-right': !dir.isHeaderOpen}"></i> </div> </uib-accordion-heading> <palette api="api"></palette> </div> </uib-accordion> 查找 mmap 调用,然后将其传送到datamash(在 Debian 变体上,使用grep安装)按第5列分组(即 mmap )和第4列:

apt install datamash

输出:

for f in /bin/ls /bin/tr ; do strace -c $f 2>&1 ; done |  
    grep mmap | datamash -W -g5 sum 4
  1. 显示之前之前的类似数据的示例 总结:

    mmap    29
    
  2. for f in /bin/false /bin/true ; do strace -c $f 2>&1 ; done | grep mmap | tee /tmp/old | datamash -W -g5 sum 4 ; echo --- ; cat /tmp/old mmap 12 --- 0.00 0.000000 0 6 mmap 0.00 0.000000 0 6 mmap 开关可让-s分组,排序和单独求和 all 系统调用:

    datamash

    (请注意,for f in /bin/pwd /bin/false /bin/true ; do strace -c $f 2>&1 > /dev/null | grep -v ':' | cut --complement -c 42-50 | sed '1s/^% /%_/;2d' | head -n -2 ; done | sed -n '1p;/^%/d;p' | datamash -HW -sg5 sum 4 | xargs printf "%-12s\t%14s\n" 输出需要清理,这是通过完成的 stracecut ...)

    输出:

    sed

答案 1 :(得分:0)

另一种解决方案是使用strace(1)-c选项:

-c计算每个系统调用的时间,调用和错误,并在程序退出时报告摘要。这试图显示与挂钟时间无关的系统时间(在内核中运行所花费的CPU时间)。如果将-c与-f一起使用,则仅保留所有跟踪进程的总计。

⟩ strace -c tree > /dev/null
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 67.89    0.099179           5     19880           lstat
 20.28    0.029621          12      2497           getdents
  4.80    0.007012           6      1241           openat
  3.60    0.005254           4      1241           close
  3.08    0.004505           4      1242           fstat
  0.27    0.000401           1       327           write
  0.07    0.000097           5        20           brk
  0.01    0.000009           9         1           sysinfo
  0.00    0.000000           0         1           read
  0.00    0.000000           0         7           mmap
  0.00    0.000000           0         4           mprotect
  0.00    0.000000           0         1           munmap
  0.00    0.000000           0         2         2 ioctl
  0.00    0.000000           0         3         3 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.146078                 26469         5 total

答案 2 :(得分:-1)

您可以使用strace -o <filename>选项将输出保存到文件中,然后使用这些文件制作diff

将时间参数传递给strace -o "filename-$(date +%T)"

的文件名

使用cat file1 file2 > file3

连接文件

将输出重定向到> filename

的文件