btrace 学习笔记
来源:互联网 发布:域名whois反查 编辑:程序博客网 时间:2024/05/29 17:53
一直听说大名鼎鼎的btrace,今天抽空玩了一下,确实是现网利器!
目标:使用btrace监控tomcat中的servlet
1. 环境说明
操作系统:ubuntu-64
Jdk:jdk 1.7
Btrace:1.2.2
2. 环境变量设置
修改/etc/profile
1) JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
export PATH=$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/rt.jar:$JAVA_HOME/lib/tools.jar
2) BTRACE_HOME
export BTRACE_HOME=/opt/app/btrace
export PATH=$BTRACE_HOME/bin:$PATH
3. 配置tomcat javaagent
修改catalina.sh
$JAVA_OPTS=-javaagent:btrace-agent.jar
4. 将$BTRAC_HOME/build jar包放入$TOMCAT_HOME/lib
5. servlet代码
HelloServlet.java
public class HelloServlet extends HttpServlet{private static int cnt=0;public synchronized int getCnt(){return cnt++;}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {getCnt();String user=req.getParameter("user");if(!checkUser(user)){out(resp,"login failed");return;}out(resp,"login success");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}private boolean checkUser(String user){if(user==null||user.equals(""))return false;return true;}private void out(HttpServletResponse resp,String res) throws IOException{OutputStream out=resp.getOutputStream();out.write(res.getBytes());out.flush();out.close();}}
6. btrace 代码
TraceServlet.java
@BTracepublic class TraceServlet {@TLSprivate static long startTime=0;//方法开始时监测cnt属性//Kind.ENTRY @OnMethod(clazz="com.unei.servlet.HelloServlet",method="doGet",location=@Location(Kind.ENTRY))public static void tracePropertyBefore(@Self Object self){println(strcat("threadId:",str(threadId(currentThread()))));Field cntField=field("com.unei.servlet.HelloServlet","cnt");Integer c=(Integer)get(cntField,self);println(strcat("start cnt:",str(c)));}/** * 方法结束时监测cnt属性 * @param @Self self this */@OnMethod(clazz="com.unei.servlet.HelloServlet",method="doGet",location=@Location(Kind.RETURN))public static void tracePropertyAfter(@Self Object self){Field cntField=field("com.unei.servlet.HelloServlet","cnt");Integer c=(Integer)get(cntField,self);println(strcat("end cnt:",str(c)));println("-----------------------");}/** * 打印方法参数 * @ProbeClassName 类名 * @ProbeMethodName 方法名 * args 目标方法参数 */@OnMethod(clazz="/com.unei.*/",method="/check.*/")public static void anyRead(@ProbeClassName String pcn,@ProbeMethodName String pmn,AnyType[] args){println(strcat("method:",strcat(strcat(pcn,"."),pmn)));print("args:");printArray(args);}
7.执行脚本
查看tomcat进程号:12876
执行btrace脚本,然后客户端请求tomcat,看到如下结果:
8.学习中遇到的问题
1)connection refused
解决方法:jvm可能会影响,换了oracle的jvm(不清楚是否真的有影响),javaagent 配置,这个其实官方文档的实例命令是有的
参考资料:
1. 下载的btrace 中的docs,第一手资料^-^,文档中的实例是最好的教程。
2. http://agapple.iteye.com/blog/962119
3. http://agapple.iteye.com/blog/1005918
0 0
- btrace 学习笔记
- btrace学习
- 【性能跟踪】btrace学习一--安装btrace
- 【性能跟踪】btrace学习一--安装btrace
- 【性能跟踪】btrace学习一--安装btrace
- [Java]btrace学习
- BTrace
- Btrace
- BTrace
- btrace
- btrace
- btrace
- btrace源码学习---顺序图
- 【性能跟踪】btrace学习二--btrace一个简单例子
- 【性能跟踪】btrace学习二--btrace一个简单例子
- 【性能跟踪】btrace学习二--btrace一个简单例子
- 【性能跟踪】btrace学习四--bBTrace example
- 【性能跟踪】btrace学习三--bBTrace Annotation注解
- WebForm 获取实体类的数据,填充页面(用AJAX异步获取值,和用session传值)
- 串口通信之项目实例一
- 如何用地址栏查看网页的源代码
- css3 transform
- 化学计量学中一些重要的概念
- btrace 学习笔记
- 十八、运算符重载(二)++运算符重载、!运算符重载、赋值运算符重载、Integer和String的初步实现
- 15.2010 年中兴面试题
- cocos2dx中创建裁剪区域 实现在指定区域精灵才能出现
- 计算机网络的基础知识
- Cocos2d-x 随机数 CCRANDOM_0_1()
- 用quick制作仿PkrCruncher
- java web查询某个时间段记录
- HTTP 错误 500.19- Internal Server Error 错误解决方法