线上性能问题排查工具btrace使用例子
来源:互联网 发布:windows 安全 编辑:程序博客网 时间:2024/05/16 19:04
安装
现在btrace项目已经迁移到了github上了。这点可以从官网( https://kenai.com/projects/btrace/downloads/directory/releases/latest )上看出。
点开这个链接就会跳转到btrace项目的github地址:https://github.com/btraceio/btrace
下面直接给出下载地址:https://github.com/btraceio/btrace/releases
脚步编写准备
写btrace脚本和一般的java差别不大,只是用了一些annotation来标识某个类是跟踪脚本。btrace用到的jar包基本都在下载的/btrace-bin/build文件下,将这三个包导进工程就可以使用了。【btrace脚本写好后可以不用编译,直接执行.java文件就可以】
设置运行环境变量
mkdir btracetar
tar-zxvf btrace-bin-1.3.8.1.tgz-C btrace
修改/etc/profile
export BTRACE_HOME=/opt/app/btrace
export PATH=$BTRACE_HOME/bin:$PATH
配置tomcat javaagent
修改catalina.sh
$JAVA_OPTS=-javaagent:btrace-agent.jar
将$BTRAC_HOME/build jar包放入$TOMCAT_HOME/lib
脚本代码:package lee;
import static com.sun.btrace.BTraceUtils.name;
import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.probeClass;
import static com.sun.btrace.BTraceUtils.probeMethod;
import static com.sun.btrace.BTraceUtils.str;
import static com.sun.btrace.BTraceUtils.strcat;
import static com.sun.btrace.BTraceUtils.timeMillis;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.ProbeClassName;
import com.sun.btrace.annotations.ProbeMethodName;
import com.sun.btrace.annotations.TLS;
@BTrace //定义注解
public class Btrace_script {
@TLS //定义一个threadLocal类型变量
private static long startTime = 0;
@OnMethod(clazz = "/lee\\..*/", method = "/.+/",location=@Location(Kind.ENTRY))
//定义的正则表达式要在 / /里 ;Kind.ENTRY为加载进入时;Kind.RETURN为离开时
public static void startMethod(){
startTime = timeMillis();
println("-----------------begin--------------------------");
}
@OnMethod(clazz = "/lee\\..*/", method = "/.+/", location = @Location(Kind.RETURN))
public static void endMethod(){
long timecost = timeMillis()-startTime;
println(strcat(strcat(name(probeClass()),","),probeMethod()));
if(timecost > 50) {
println(strcat("the class method execute time=>", str(timecost)));
}
println("-----------------end--------------------------");
}
}
被监控实例代码:
// Servlet必须继承HttpServlet类
@WebServlet(name="firstServlet"
, urlPatterns={"/firstServlet"})
public class FirstServlet extends HttpServlet
{
// 客户端的响应方法,使用该方法可以响应客户端所有类型的请求
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,java.io.IOException
{
// 设置解码方式
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charSet=GBK");
// 获取name的请求参数值
String name = request.getParameter("name");
// 获取gender的请求参数值
String gender = request.getParameter("gender");
// 获取color的请求参数值
String[] color = request.getParameterValues("color");
// 获取country的请求参数值
String national = request.getParameter("country");
int max=60;
int min=40;
Random random = new Random();
int s = random.nextInt(max)%(max-min+1) + min;
try {
Thread.sleep(s);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 获取页面输出流
PrintStream out = new PrintStream(response.getOutputStream());
//输出HTML页面标签
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet测试</title>");
out.println("</head>");
out.println("<body>");
// 输出请求参数的值:name
out.println("您的名字:" + name + "<hr/>");
// 输出请求参数的值:gender
out.println("您的性别:" + gender + "<hr/>");
// 输出请求参数的值:color
out.println("您喜欢的颜色:");
for(String c : color)
{
out.println(c + " ");
}
out.println("<hr/>");
out.println("您喜欢的颜色:");
// 输出请求参数的值:national
out.println("您来自的国家:" + national + "<hr/>");
out.println("</body>");
out.println("</html>");
}
}
运行脚步脚步监控:
1、启动tomcat运行被监控web servlet.
2、查找运行的Java进程ID ,命令 jps
3 、启动监控脚步:
btrace 6140 Btrace_script.java
运行效果图:
更多参考资料:
2. http://agapple.iteye.com/blog/962119
3. http://agapple.iteye.com/blog/1005918
- 线上性能问题排查工具btrace使用例子
- 线上排查工具btrace和jvm-inspector使用说明
- 使用Btrace进行线上系统性能分析
- 线上性能问题初步排查方法
- 线上性能问题初步排查方法
- 线上性能问题初步排查方法
- 线上性能问题初步排查方法
- 线上性能问题初步排查方法
- 线上性能问题初步排查方法
- 线上性能检测工具之Btrace
- 调试工具BTrace 的使用--例子
- 调试工具BTrace 的使用--例子
- 在线调试工具BTrace 的使用--例子
- 调试工具BTrace 的使用--例子
- 学习使用greys排查线上问题
- 排查线上问题
- 线上问题排查
- JVM线上问题排查
- 如何安装3.6版本的scikit-learn(windows 7 64bit)
- Linux-SSH:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED解决方法
- jquery select默认选中 jquery checkbox默认选中 jquery radio默认选中
- Tomcat在Linux上的安装与配置
- recyclerView多条目布局
- 线上性能问题排查工具btrace使用例子
- 网络基础之网桥和交换机的工作原理及区别
- set serveroutput on 命令
- DB2小知识
- linux如何杀死可以自动启动的程序
- js对手机软键盘的监听
- 从键盘中输入一个整数n,求1-n的和,以及偶数和、奇数和
- JavaSE 反射 Part7
- hashmap的实现原理