gpt4 book ai didi

linux - 收集并汇总 `strace` 命令的统计信息?

转载 作者:太空宇宙 更新时间:2023-11-04 12:25:56 25 4
gpt4 key购买 nike

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

我想合并“系统调用”和“调用”列。因此,例如,如果 ls 进行了 19 个 mmap 系统调用,而 tr 进行了 11 个 mmap 系统调用,我想合并这些结果,以便最终统计数据仅显示某些文件中总共有 30 个 mmap 系统调用。此外,如果一个系统调用只出现在一个可执行文件中,它仍然应该包含在最终结果中。

我该怎么做?

最佳答案

使用 grep 查找 mmap 调用,然后将其通过管道传输到 datamash (在 Debian 变体上,使用 apt install datamash 安装)按第 5 列分组(即 mmap),然后对第 4 列求和:

for f in /bin/ls /bin/tr ; do strace -c $f 2>&1 ; done |  
grep mmap | datamash -W -g5 sum 4

输出:

mmap    29

  1. 示例显示类似数据之前的样子总结:

    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
  2. -s 开关允许 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 输出需要清理,这是由cutsed...)

    输出:

    GroupBy(syscall)        sum(calls)
    access 9
    arch_prctl 3
    brk 5
    close 23
    execve 3
    fstat 22
    getcwd 1
    ioctl 1
    mmap 31
    mprotect 12
    munmap 3
    open 34
    read 5
    write 1

关于linux - 收集并汇总 `strace` 命令的统计信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44716713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com