一、下载btrace

可以下载它的源码包,它的源码包是一个gradle项目

https://github.com/btraceio/btrace

如果只想使用它排查问题,也可以直接下载它的bin包,下载地址

https://github.com/btraceio/btrace/releases/

可以直接通过这个链接下载1.3.8版本的btrace

wget https://github.com/btraceio/btrace/releases/download/v1.3.8.3-1/btrace-bin-1.3.8.3.zip

二、配置环境变量

解压完成后需要配置环境变量BTRACE_HOME

export BTRACE_HOME=/home/work/btrace/
export PATH=$PATH:$BTRACE_HOME/bin

三、编写btrace脚本

比如我们监控spring-data-redis出现异常的时候,打印入参和异常堆栈信息:

package com;
import com.sun.btrace.AnyType;
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
import com.alibaba.fastjson.JSON;@BTrace(unsafe=true)
public class Trace {@OnMethod(clazz = "org.springframework.data.redis.core.DefaultHashOperations", method = "putAll", location =@Location(Kind.ERROR)) public static void putAll(Throwable exception,AnyType[] args){println("\n##################################@#####DefaultHashOperations");    println(JSON.toJSONString(args));println(JSON.toJSONString(exception));println("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");   }@OnMethod(clazz = "org.springframework.data.redis.core.DefaultSetOperations", method = "add", location =@Location(Kind.ERROR)) public static void add(Throwable exception,AnyType[] args){println("\n##################################@#####DefaultSetOperations");   println(JSON.toJSONString(args));println(JSON.toJSONString(exception));println("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");   }
}

四、执行脚本:

./btrace -cp /home/work/btrace/bin/fastjson-1.2.29.jar -p 2021 5941 Trace.java

说明:
1. -cp  /home/work/btrace/bin/fastjson-1.2.29.jar  指定classpath,因为引入了fastjson对参数序列化成json字符串后输出,所以这里加入了fastjson的jar包;

2. -p 2021 btrace默认端口为2020,这里更改了默认端口;

3. 5941是要追踪的jvm进程的进程id;

4. Trace.java 是第三步编写的java脚本的文件名;

异常说明

1. Port 2020 unavailable.  
btrace会在remote JVM  agent开启一个远程socketserver,默认端口是2020,正好如果一台台服务器有多个JVM实例需要使用btrace,当在第一个JVM上执行btrace命令后,再从其他jvm实例上执行btrace就会报错。这时候就可以使用-p参数指定端口;

2. method calls are not allowed - only calls to BTraceUtils are allowed

原因是btrace存在安全限制,不允许调用com.sun.btrace.BTraceUtils这个类中提供的方法以外的方法。但是我的脚本中使用的fastjson来讲对象转换为json字符串打印出来,所以需要解除安全限制;

3. Unable to open socket file: target process not responding or HotSpot VM not loaded

运行btrace的用户必须和启动jvm进程的用户是同一个

正确的姿势解除安全限制

网上提供了很多种方解除安全限制的方式都不靠谱,例如:

1. 使用 -u    ;

2. 给btrace设置jvm参数 -Dcom.sun.btrace.unsafe=true

如果,按上面两种方式是无法解除安全限制的,正确的解除安全限制的姿势是给btrace的jvm启动脚本添加了

-Dcom.sun.btrace.unsafe=true参数后,还需要在java脚本类的@Btrace注解上加上unsafe=true:

@BTrace(unsafe=true)

btrace安装,配置,使用,常见异常,解除安全限制相关推荐

  1. Redis集群配置和常见异常解决

    Redis集群配置和常见异常解决 参考文章: (1)Redis集群配置和常见异常解决 (2)https://www.cnblogs.com/hzb462606/p/11121281.html 备忘一下 ...

  2. PHP中间件ICE,ICE的安装配置,ICE常见编译和运行(异常)错误(自测Php版本安装部分,因为php版本跟ice版本不一样失败)

    ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件.使用ICE能使得php(或c++,java,python)与java,c++,.net,py ...

  3. VS2013 安装配置 C++ boost 库

    boost:提升,犹在功能的提升,也见于机器学习的相关算法.也即Boost是对STL(标准模板库)的升级版,性能提升版.本文我们会发现,Boost开发者为Windows平台下的boost的安装配置提供 ...

  4. Unraid以Docker方式安装配置qbittorrent的注意事项

    文章目录 0.前言 1.qbittorrent是什么? 2.在UnRaid中安装部署设置qbittorrent 2.1.关于qbittorrent的安装 2.2.关于qbittorrent的配置 3. ...

  5. Servlet学习DAY_01:服务器概念/Web服务器的作用/ Servlet概念/ 如何关联和解除Tomcat/ 创建一个Web工程 /Servlet响应流程/ Get-Post /常见异常

    Servlet 什么是服务器 服务器就是一台高性能电脑 电脑上安装了提供服务的软件就称为 xxx服务器 举例: 邮件服务器: 就是在电脑上安装了提供邮件收发服务的软件 ftp服务器: 就是在电脑上安装 ...

  6. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程...

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  7. 几个常见的js插件安装配置

    几个常见的js插件安装配置color piker,debugger for chrome 这里推荐几个js插件,并附上安装方法(macos系统下安装) 下面是推荐列表: 1.Color Piker 配 ...

  8. selenium 学习、工作 记录,附常见异常和工具方法

    selenium 学习.工作 记录,附常见异常和工具方法 基础配置 2020.03.31 开发者模式 设置有认证的http代理 让selenium接管人为打开的chrome 2020.07.23(79 ...

  9. orcal 数据库 maven架构 ssh框架 的全xml环境模版 及常见异常解决

    创建maven项目后,毫不犹豫,超简单傻瓜式搞定dependencies(pom.xml 就是maven的依赖管理),这样你就有了所有你要的包 <project xmlns="http ...

  10. Hadoop常见异常

    Hadoop常见异常 @(HADOOP)[hadoop] Hadoop常见异常 1ShellExitCodeException 2libhadoopso100 which might have dis ...

最新文章

  1. 为什么很多优秀的人,都把闹钟定在早晨5:57 ?
  2. Navicat 连接MySQL数据库 报错2059 - authentication plugin 'caching_sha2_password'的解决办法...
  3. Android开发之GridView的使用(解读谷歌官方API)
  4. jFreeChary初探
  5. zblog php robots,zblog的robots.txt怎么写?zblog的robots.txt文件示例下载
  6. mysql中一些简单但是新手容易犯的错误
  7. 【题意+分析】1071 Speech Patterns (25 分)_27行代码AC
  8. 阮一峰:jQuery官方基础教程笔记
  9. 包装类型与包装类别_包装的重要性
  10. php 模拟并发请求_PHP模拟并发请求
  11. 往map里的vector添加_面试官:同步容器(如Vector)的所有操作一定是线程安全的吗?...
  12. “webservice远程测试显示 “测试窗体只能用于来自本地计算机
  13. 组合数学—容斥原理与鸽巢原理
  14. linux主机名包含点
  15. 程序人生:软件测试 非技术性面试题【建议每个测试人观看】
  16. HDU 2017 一系列统计数据
  17. Python实现蒙特卡罗方法仿真模拟求解圆周率Pi值
  18. Java 设计模式 之 单例模式(Singleton)
  19. 神奇的python系列11:函数之生成器,列表推导式
  20. java的农夫养牛_以前农村里养牛的,为何喜欢在牛脖子上挂个铃铛?

热门文章

  1. 高级计算机网络考试复习
  2. 微信禁止访问国外服务器域名,域名被禁止访问?
  3. (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
  4. 用Python爬取了上万部电影的排名,周末周末好带女神一起去
  5. 为什么说当下重仓IPFS/FIL才是关键
  6. 拖放(DragDrop)
  7. 记一次将动态磁盘转为基本磁盘(无损)
  8. 原来写在BlogBus(博客大巴)上的文章搬运到这里!~
  9. 包围曝光(Bracket Exposure)
  10. 华为手机怎样才算激活了_华为手机开机激活,华为智能手机怎么激活?