本站与大家分享了如何使用系统Tap统计函数来执行耗时的任务。相信大部分人都不太了解,分享这篇文章,供大家参考。希望你看完这篇文章后收获很大。我们一起来看看。
前言
当我们需要分析应用程序时,我们通常可以使用性能图或火焰图。但是这些工具只能识别问题,发现那些功能占用更多的cpu,需要优化。但是无法给出量化数据,比如这个功能耗时的情况,是1ms还是5ms。
因此,我们可以使用SystemTap来统计应用程序的耗时情况,而无需在代码中添加耗时的统计代码。
SystemTap可以跟踪内核函数和用户模式进程。当我们跟踪用户模式流程时,我们需要使用它的流程模块。
查找函数符号
在很多情况下,执行代码时,它的函数符号不一定是代码中写的名字,所以我们可以用下面的脚本打印出应用程序中正在调用的函数符号。
probeprocess(\’/data0/app \’)。函数(“*”)
println(probefunc())
}然后执行
Stapecho.stp它会打印出程序/data0/app运行时使用的各种函数的名称,最好在这里填写绝对路径。我们可以找到我们需要计数的函数的名称。
统计函数耗时
我们可以使用SystemTap内置的直方图来显示耗时的分布。我们有两个直方图函数可以使用:
@ hist _ linear (v,start,stop,interval) #打印起止间隔的间隔间隔直方图
@hist_log(v)#打印基于2:
Globalsands #声明了一个全局统计存储容器
ProbeProcess (\’/data0/app \’)。函数(\’ git。内部。xx。发送\’)。return {# Function是函数名,也支持通配符*,等。计算这个函数何时返回需要时间。
发送get time of day _ us()-@ entry(get time of day _ us())#以微秒精度计数,entry方法在函数入口放置一个表达式。
}
Probetimer.s(10){#每10秒打印一次直方图
打印(@hist_log(发送))
}然后执行stap elaspe.stp,每10秒钟获取一次统计结果。如果您想每10秒清除一次统计数据,您可以将打印功能修改为:
Probetimer.s(10){#每10秒打印一次直方图
打印(@hist_log(发送))
删除发送#空数据
}以上是《如何使用SystemTap统计函数执行耗时任务》一文的全部内容,感谢阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果你想学习更多的知识,请关活动:慈云数据爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!! 点击查看注本站!
《怎么利用SystemTap统计函数执行耗时》来自互联网同行内容,若有侵权,请联系我们删除!
还没有评论,来说两句吧...