如何利用SystemTap统计函数执行耗时详解

 更新时间:2017年09月20日 10:37:44   作者:源代码  
SystemTap是监控和跟踪运行中的Linux 内核的操作的动态方法,下面这篇文章主要给大家介绍了关于如何利用SystemTap统计函数执行耗时的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧。

前言

当我们需要对应用程序进行系能分析时,我们通常可以使用perf或者火焰图。 但是这些工具通常只能定性问题,发现那些函数占用cpu较多,需要优化。但是给不出定量的数据, 比如这个函数的耗时情况,它耗时1ms还是5ms。

因此在不在代码中加入统计耗时的代码的情况,我们可以使用SystemTap来统计应用程序的耗时情况。

SystemTap可以跟踪内核函数和用户态进程,当我们跟踪用户态进程时,需要使用其process模块。

查找函数符号

很多情况下,代码在执行时,其函数符号并不一定是代码中写的名称,因此我们可以使用以下脚本打印 出应用程序中在调用的函数符号。

probe process("/data0/app").function("*") {
 println(probefunc())
}

然后执行

stap echo.stp

其会打印出/data0/app这个程序运行时调用到的各个函数名,此处最好填绝对路径。我们可以从中找到 我们需要统计的函数名称。

统计函数耗时

我们可以使用SystemTap内置的直方图来展示耗时的分布。我们有两种直方图函数可以使用:

@hist_linear(v, start, stop, interval) # 打印start-stop区间interval间隔的直方图
@hist_log(v)       # 打印以2为底指数分布的直方图

统计脚本:

global sends # 声明全局的统计存储容器

probe process("/data0/app").function("git.intra.xx.send").return { # function中为函数名,同时支持通配符*等,在该函数return时计算耗时
 sends <<< gettimeofday_us() - @entry(gettimeofday_us()) # 以微秒精度来统计,entry方法将一个表达式放置于函数入口处
}

probe timer.s(10) { # 每10s打印一次直方图
 print(@hist_log(sends))
}

然后执行stap elaspe.stp即可获得每10秒统计的结果,如果希望每10秒清空重新统计的话, 可以将打印函数修改为:

probe timer.s(10) { # 每10s打印一次直方图
 print(@hist_log(sends))
 delete sends  # 清空数据
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

参考

1.148. systemtap

相关文章

  • 使用squid搭建http代理的方法

    使用squid搭建http代理的方法

    这篇文章主要介绍了使用squid搭建http代理的方法,需要的朋友可以参考下
    2016-11-11
  • 浅谈linux下的一些常用函数的总结(必看篇)

    浅谈linux下的一些常用函数的总结(必看篇)

    下面小编就为大家带来一篇浅谈linux下的一些常用函数的总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • LVS+Keepalived构建高可用负载均衡配置方法(配置篇)

    LVS+Keepalived构建高可用负载均衡配置方法(配置篇)

    这篇文章主要介绍了LVS+Keepalived构建高可用负载均衡配置方法,需要的朋友可以参考下
    2013-06-06
  • Linux ipcs命令的使用

    Linux ipcs命令的使用

    这篇文章主要介绍了Linux ipcs命令的使用,帮助大家更好的学习和理解Linux,感兴趣的朋友可以了解下
    2020-08-08
  • CentOS 8设置自动更新的完整步骤

    CentOS 8设置自动更新的完整步骤

    这篇文章主要给大家介绍了关于CentOS 8设置自动更新的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用CentOS 8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • Scp如何使用密码拷贝文件

    Scp如何使用密码拷贝文件

    在Linux系统中使用scp命令复制文件的两种方法:手动输入密码和使用密钥拷贝,手动输入密码时,系统会提示输入密码;使用密钥拷贝时,需要先生成ssh密钥对,并将公钥添加到远程服务器的~/.ssh/authorized_keys文件中
    2025-02-02
  • Kerberos安装教程及使用详解

    Kerberos安装教程及使用详解

    Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务。这篇文章主要介绍了Kerberos安装教程及使用详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • Centos 安装 PHP7.4 和 Nginx的操作方法

    Centos 安装 PHP7.4 和 Nginx的操作方法

    这篇文章主要介绍了Centos 安装 PHP7.4 + Nginx的操作方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 关于Linux账号管理详解

    关于Linux账号管理详解

    本文主要针对Linux系统的账户管理方便的内容做了详细介绍,以及操作账户时的具体做法。
    2017-11-11
  • linux如何查看nginx启动路径

    linux如何查看nginx启动路径

    这篇文章主要介绍了linux如何查看nginx启动路径问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论