美文网首页JAVA EE那些事儿编程Java学习笔记
Java应用监控利器——BTrace教程

Java应用监控利器——BTrace教程

作者: MountainKing | 来源:发表于2015-12-05 20:28 被阅读5950次

背景

生产环境中可能出现各种问题,但是这些问题又不是程序error导致的,可能是逻辑性错误,这时候需要获取程序运行时的数据信息,如方法参数、返回值来定位问题,通过传统的增加日志记录的方式非常繁琐,而且需要重启server,代价很大。BTrace应运而生,可以动态地跟踪java运行程序,将跟踪字节码注入到运行类中,对运行代码侵入较小,对性能上的影响可以忽略不计。

配置及用法

  1. 去官网下载BTrace,配置环境变量以便在任何路径下能执行btrace命令。

  2. 命令格式:

btrace [-p <port>] [-cp <classpath>] <pid> <btrace-script>

port指定BTrace agent的服务端监听端口号,用来监听clients,默认为2020,可选。
classpath用来指定类加载路径,比如你的BTrace代码里用到了netty等第三方jar包。
pid表示进程号,可通过jps命令获取。
btrace-script即为BTrace脚本。
下面是我用来测试的一条btrace命令,大家可以参考一下:

btrace -p 2020 -cp /home/mountain/Softwores/tomcat8/lib/servlet-api.jar (jps | grep Bootstrap | awk '{print $1}') /home/mountain/test/Btrace.java

实战

  1. 获取方法参数以及返回值

业务代码:

public String sayHello(String name, int age) {
    return "hello everyone";
}

BTrace代码:

import com.sun.btrace.BTraceUtils;
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;

@BTrace
public class Btrace {

  @OnMethod(
      clazz = "com.jiuyan.message.controller.AdminController",
      method = "sayHello",
      location = @Location(Kind.RETURN)//函数返回的时候执行,如果不填,则在函数开始的时候执行
  )
  public static void sayHello(String name, int age, @Return String result) {
      println("name: " + name);
      println("age: " + age);
      println(result);
  }

}

调用sayHello('mountain', 1),输出应该是:

name: mountain
age: 1
hello everyone

可以对字符串进行正则匹配以达到监控特定问题的目的:

if(BTraceUtils.matches(".*345.*", str)) {
     println(str);
}
  1. 计算方法运行消耗的时间

BTrace代码:

import java.util.Date;

import com.sun.btrace.BTraceUtils;
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;

@BTrace
public class Btrace {
  
  @OnMethod(
      clazz = "com.jiuyan.message.controller.AdminController",
      method = "sayHello",
      location = @Location(Kind.RETURN)
  )
  public static void sayHello(@Duration long duration) {//单位是纳秒,要转为毫秒
      println(strcat("duration(ms): ", str(duration / 1000000)));
  }

}

小贴士

如果遇到Unable to open socket file: target process not responding or HotSpot VM not loaded,说明权限不对,当前用户与JVM pid用户不匹配,应该以sudo -u [user] btrace ...来执行。

相关文章

  • Java应用监控利器——BTrace教程

    背景 生产环境中可能出现各种问题,但是这些问题又不是程序error导致的,可能是逻辑性错误,这时候需要获取程序运行...

  • BTrace:线上问题排查工具

    BTrace简介 GitHub地址:BTrace 下载地址:v1.3.11.3 官方使用教程:Btrace使用教程...

  • 初识Btrace

    BTrace是sun公司推出的一款Java 动态、安全追踪(监控)工具,可以在不用重启的情况下监控系统运行情况,方...

  • Btrace UserGuide翻译转载

    原文地址:BTrace用户手册<译> BTrace(https://btrace.dev.java.net/) 是...

  • 在IDE开发工具中(idea、eclipse等)配置BTrace

    BTrace是基于动态字节码修改技术(Hotswap)实现java实时性能分析与动态监控。看到网上有人问如何在I...

  • JVM性能调优实战(〇) - 简介

    收获 计划安排 基于JDK命令行工具的监控 基于Btrace的监控调试 Tomcat性能监控与调优 Nginx性能...

  • JVM诊断

    JVM诊断 Btrace 一种用于Java平台的安全,动态的跟踪工具 BTrace可用于动态跟踪正在运行的Java...

  • CAT使用总结

    简介 CAT基于Java开发的实时应用监控平台,包括实时应用监控,业务监控。 CAT支持的监控消息类型包括: Tr...

  • 【推荐】大众点评Java开发实时应用监控平台-CAT

    CAT介绍 CAT是基于Java开发的实时应用监控平台,包括实时应用监控,业务监控。 CAT作为大众点评网基础监控...

  • Cat入门

    Dianping CAT 安装说明文档 CAT基于Java开发的实时应用监控平台,包括实时应用监控,业务监控。 C...

网友评论

本文标题:Java应用监控利器——BTrace教程

本文链接:https://www.haomeiwen.com/subject/dqoshttx.html