性能测试分析案例-使用动态追踪定位性能瓶颈

发布时间:2024年01月13日

所谓动态追踪,就是在系统或者应用程序正常运行的时候,通过内核中提供的探针,来动态追踪它们的行为,从而辅助排查出性能问题的瓶颈。
使用动态追踪,可以在不修改代码、不重启服务的情况下,动态了解应用程序或者内核的行为,排查线上问题、特别是不容易重现的问题。
在 Linux 系统中,常见的动态追踪方法包括 ftrace、perf、eBPF 以及 SystemTap 等。
perf
使用 perf record/top 时,都是先对事件进行采样,然后再根据采样数,评估各个函数的调用频率。实际上,perf 的功能远不止于此。
比如,perf 可以用来分析 CPU cache、CPU 迁移、分支预测、指令周期等各种硬件事件;
perf 也可以只对感兴趣的事件进行动态追踪。
在 perf 的各个子命令中添加 --event 选项,设置追踪感兴趣的事件。如果这些预定义的事件不满足实际需要,你还可以使用 perf probe 来动态添加。而且,除了追踪内核事件外,perf 还可以用来跟踪用户空间的函数。
执行 perf probe 命令,添加 do_sys_open 探针:

perf probe --add do_sys_open
Added new event:
  probe:do_sys_open    (on do_sys_open)
You can now use it in all perf tools, such as:
    perf record -e probe:do_sys_open -aR sleep 1

执行 10s 内的 do_sys_open 采样:

perf record -e probe:do_sys_open -aR sleep 10

在这里插入图片描述

执行 perf script ,来查看采样结果了:

perf script

在这里插入图片描述
列出了调用 do_sys_open 的任务名称、进程 PID 以及运行的 CPU 等信息。不过,对于 open 系统调用来说,只知道它被调用了并不够,我们需要知道的是,进程到底在打开哪些文件。所以,实际应用中,我们还希望追踪时能显示这些函数的参数。
执行下面的命令,你就可以知道 do_sys_open 的所有参数:

perf probe -V do_sys_open
Available variables at do_sys_open
        @<do_sys_open+0>
                char*   filename
                int     dfd
                int     flags
                struct open_flags       op
                umode_t mode
文章来源:https://blog.csdn.net/bala5569/article/details/135440769
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。