我知道我可以运行strace -c ls
来收集ls
可执行文件的系统调用统计信息。但是,我想在不同的可执行文件上运行命令strace -c {some executable here}
mulitiple次,合并各个结果,然后写入单个文件。
我想合并'系统调用'和#39;来电列。例如,如果ls
进行了19次mmap
系统调用而tr
进行了11次mmap
次系统调用,我想合并这些结果,以便最终的统计数据只显示30 mmap
系统在某个文件中调用整体。此外,如果系统调用仅出现在一个可执行文件中,它仍应包含在最终结果中。
我该怎么做?
答案 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
显示之前之前的类似数据的示例 总结:
mmap 29
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"
输出需要清理,这是通过完成的
strace
,cut
,等 ...)
输出:
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