btrace安装,配置,使用,常见异常,解除安全限制
一、下载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安装,配置,使用,常见异常,解除安全限制相关推荐
- Redis集群配置和常见异常解决
Redis集群配置和常见异常解决 参考文章: (1)Redis集群配置和常见异常解决 (2)https://www.cnblogs.com/hzb462606/p/11121281.html 备忘一下 ...
- PHP中间件ICE,ICE的安装配置,ICE常见编译和运行(异常)错误(自测Php版本安装部分,因为php版本跟ice版本不一样失败)
ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件.使用ICE能使得php(或c++,java,python)与java,c++,.net,py ...
- VS2013 安装配置 C++ boost 库
boost:提升,犹在功能的提升,也见于机器学习的相关算法.也即Boost是对STL(标准模板库)的升级版,性能提升版.本文我们会发现,Boost开发者为Windows平台下的boost的安装配置提供 ...
- Unraid以Docker方式安装配置qbittorrent的注意事项
文章目录 0.前言 1.qbittorrent是什么? 2.在UnRaid中安装部署设置qbittorrent 2.1.关于qbittorrent的安装 2.2.关于qbittorrent的配置 3. ...
- Servlet学习DAY_01:服务器概念/Web服务器的作用/ Servlet概念/ 如何关联和解除Tomcat/ 创建一个Web工程 /Servlet响应流程/ Get-Post /常见异常
Servlet 什么是服务器 服务器就是一台高性能电脑 电脑上安装了提供服务的软件就称为 xxx服务器 举例: 邮件服务器: 就是在电脑上安装了提供邮件收发服务的软件 ftp服务器: 就是在电脑上安装 ...
- asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程...
最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...
- 几个常见的js插件安装配置
几个常见的js插件安装配置color piker,debugger for chrome 这里推荐几个js插件,并附上安装方法(macos系统下安装) 下面是推荐列表: 1.Color Piker 配 ...
- selenium 学习、工作 记录,附常见异常和工具方法
selenium 学习.工作 记录,附常见异常和工具方法 基础配置 2020.03.31 开发者模式 设置有认证的http代理 让selenium接管人为打开的chrome 2020.07.23(79 ...
- orcal 数据库 maven架构 ssh框架 的全xml环境模版 及常见异常解决
创建maven项目后,毫不犹豫,超简单傻瓜式搞定dependencies(pom.xml 就是maven的依赖管理),这样你就有了所有你要的包 <project xmlns="http ...
- Hadoop常见异常
Hadoop常见异常 @(HADOOP)[hadoop] Hadoop常见异常 1ShellExitCodeException 2libhadoopso100 which might have dis ...
最新文章
- 为什么很多优秀的人,都把闹钟定在早晨5:57 ?
- Navicat 连接MySQL数据库 报错2059 - authentication plugin 'caching_sha2_password'的解决办法...
- Android开发之GridView的使用(解读谷歌官方API)
- jFreeChary初探
- zblog php robots,zblog的robots.txt怎么写?zblog的robots.txt文件示例下载
- mysql中一些简单但是新手容易犯的错误
- 【题意+分析】1071 Speech Patterns (25 分)_27行代码AC
- 阮一峰:jQuery官方基础教程笔记
- 包装类型与包装类别_包装的重要性
- php 模拟并发请求_PHP模拟并发请求
- 往map里的vector添加_面试官:同步容器(如Vector)的所有操作一定是线程安全的吗?...
- “webservice远程测试显示 “测试窗体只能用于来自本地计算机
- 组合数学—容斥原理与鸽巢原理
- linux主机名包含点
- 程序人生:软件测试 非技术性面试题【建议每个测试人观看】
- HDU 2017 一系列统计数据
- Python实现蒙特卡罗方法仿真模拟求解圆周率Pi值
- Java 设计模式 之 单例模式(Singleton)
- 神奇的python系列11:函数之生成器,列表推导式
- java的农夫养牛_以前农村里养牛的,为何喜欢在牛脖子上挂个铃铛?
热门文章
- 高级计算机网络考试复习
- 微信禁止访问国外服务器域名,域名被禁止访问?
- (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
- 用Python爬取了上万部电影的排名,周末周末好带女神一起去
- 为什么说当下重仓IPFS/FIL才是关键
- 拖放(DragDrop)
- 记一次将动态磁盘转为基本磁盘(无损)
- 原来写在BlogBus(博客大巴)上的文章搬运到这里!~
- 包围曝光(Bracket Exposure)
- 华为手机怎样才算激活了_华为手机开机激活,华为智能手机怎么激活?