注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

systemtap初体验  

来自张翱   2014-03-21 15:00:45|  分类: 性能测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
很早就在各种分享和沙龙上听说过systemtap工具的强大威力,最近终于有机会在项目测试过程中亲身体验了一把,简单记录下一些经验和体会

简单介绍下背景,项目的被测服务器基于OpenResty开发,它是一个全功能的 Web 应用服务器,打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项,使开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种C以及Lua 模块来定制实现丰富的功能。OpenResty的作者编写了一个脚本工具集nginx-systemtap-toolkit(https://github.com/agentzh/nginx-systemtap-toolkit)来测试这个系统的性能,而这个工具的核心就是基于systemtap的。

安装systemtap
我们的服务器一般是debian系统的,如果没有版本要求的话可以直接apt-get
apt-get install systemtap linux-image-`uname -r`-dbg linux-headers-`uname -r`
debian7的源默认安装的是systemtap 1.7版本,内核版本为3.2(需要打patch使其支持utrace即userspace tracing)
debian8的源默认安装的是systemtap 2.3版本,内核版本为3.12(3.5以上内核原生支持utrace)
当然也可以自己编译安装configure、make all、make install,编译过程中如有错误,一般是缺少相关的依赖库,装上即可

nginx-systemtap-toolkit
这是一个脚本工具集,我们主要使用了sample-bt和ngx-sample-lua-bt两个脚本
sample-bt
can be used to sample backtraces in either user space or kernel space or both for any user process that you specify (yes, not just Nginx!)
ngx-sample-lua-bt
Similar to the sample-bt script, but samples the Lua language level backtraces
sample-bt脚本能对用户空间或者内核空间的任何进程进行调用栈的采样,类似的,ngx-sample-lua-bt也进行调用栈的采样,只不过是限定在openresty的lua脚本层级上,两者结合,就能定位是程序热点是openresty自身还是自定义lua脚本的部分了
详细的使用步骤在https://github.com/agentzh/nginx-systemtap-toolkit页面上,这里就不赘述了

火焰图
nginx-systemtap-toolkit结合火焰图工具(https://github.com/brendangregg/FlameGraph)能够对测试结果进行直观的展示,便于后续分析程序热点
火焰图的结果如下
systemtap初体验 - 网易杭州QA - 网易杭州 QA Team
 
每个框代表一个栈里的一个函数
Y轴代表栈深度,最顶端的框表示正在运行的函数,下面的框都是其祖先或者说父函数
X轴代表采样总量,不像大多数图表那样从左到右并不代表时间,而且也不具备顺序性
框的宽度代表占用CPU的时间。那些较宽的框可能表示其函数比窄的运行慢,或者被调用的频率更高。
如果是多线程同时采样,采样总数会超过总时间

由于博客不支持svg格式,感兴趣的同学可以移步http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html,了解更多。
有了它我们就能快速定位出程序热点了
这次项目经历我们只是利用了大牛的脚本初次感受了systemtap的魅力,希望以后有机会能自己编写探测脚本深入体验其强大
  评论这张
 
阅读(955)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016