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

网易杭州 QA Team

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

 
 
 
 
 

日志

 
 

服务端微观性能监控之工具篇-BTrace入门  

来自哎哟喂嘞   2012-11-30 19:29:25|  分类: 性能测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
从两个大的角度来看,性能测试可以从客户端视角和服务端视角评估整体性能,客户端视角即从请求的响应时间、TPS等指标来衡量,服务端视角可以从宏观和微观评估,宏观即常见的系统资源指标的表现,而微观指服务器代码片段的调用时间、热点等。
最近在项目中使用了BTrace这个工具进行服务端微观性能的监控,本篇只简单介绍BTrace工具的入门知识及学习体会。
BTrace是一个可以在不改代码、不重启应用的情况下,动态的查看程序运行细节的工具。BTrace不需要在待测java进程的启动参数中添加额外的javaagent,能够动态的把用java写的btrace代码挂接到vm运行时上去,通过btrace代码(或脚本)中的逻辑获取到一些运行细节。
典型的使用btrace的方法为:btrace -cp classpath pid btrace-java-code
classpath:btrace代码(或脚本)中用到的jar
pid:待测java进程的pid
btrace-java-code:btrace代码(或脚本),最终会挂接到运行时,用于获取特定的运行细节,如方法参数值,方法调用时间,返回值等

一个典型的btrace脚本如下

import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
import com.cloudera.flume.core.Event;

@BTrace public class Jstack {
    @OnMethod(     
        clazz="com.cloudera.flume.agent.AgentSink", 
        method="append",
        location=@Location(value=Kind.RETURN)
    )  
    public static void onAppend(@ProbeClassName String pcn, @ProbeMethodName String pmn, Event e) {
        println(str(get(field("com.cloudera.flume.core.EventImpl",
"body"), e)));
        jstack();
        println("=========================");
    }
}

其中,@OnMethod标签表示要注入trace代码的位置。设定特定的clazz和method属性,两者都支持类似正则表达式类型的匹配规则;location属性表示更具体的部位,是在方法调用入口还是在方法返回时trace
onAppend()方法可任意命名,它的参数并不固定,可根据需要选取。在这个例子中,@ ProbeClassName标签所指的String参数pcn,表示所注入代码处的类名,即com.cloudera.flume.agent.AgentSink,当我们是使用正则匹配类名的时候,这个参数就会随被测代码不同而不同了;@ ProbeMethodName标签所指的String参数pmn,表示所注入代码处的方法名,即append;Event参数e表示的是传递给append方法的唯一参数,可以在下面的方法体中使用。
还有两个比较实用的参数标签是@Return和@Duration,顾名思义,@Return可以获取目标方法的返回值,@Duration获取目标方法的执行时间,单位为纳秒。
在onAppend()方法内部,field(className, memberName)返回为className类的memberName成员的Field实例,再通过get(Field, instance)获取instance对象实例中Field所对应的成员的值。Jstack可以打印出当前线程的调用堆栈。
Btrace工具在性能测试、功能测试及问题定位中都能发挥巨大的作用,更多应用场景且听下回分解。
  评论这张
 
阅读(1101)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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