关于 Java动态追踪、线上debug的工具使用

这里使用的工具是 阿里巴巴开源工具 arthas,在这里做几个简单的工具使用说明和示例。

前期准备:

  1. 官方文档地址:https://alibaba.github.io/arthas/quick-start.html
  2. 测试使用demo(横云断岭):https://github.com/hengyunabc/spring-boot-inside
  3. 工具:https://github.com/alibaba/arthas/releases

 

开始操作:

我是在windows下操作演示的。linux请参考官方文档或其他示例

  • 首先:    拉取demo代码到本地,运行起来。
  • 进入命令窗口 使用jps,可以看到,demo已经运行起来了(如果jps命令无效、不识别,但是java -version生效,就重新配置环境变量,或者将环境变量的相对路径配置为绝对路径)

  • 启动arthas工具,-jar 方式进行启动,这里第四个进程是demo进程,输入4然后回车

此时工具已经启动成功。现在可以在命令行模式下操作,也可以通过浏览器的方式进行访问

http://127.0.0.1:8563/

  • arthas 有很好的历史命令提示功能,通过上下方向键进行查找,也可以对输入前缀命令进行历史命令补全
  • tab 进行命令补全

 

命令示例演示:

watch

方法执行数据观测,让你能方便的观察到指定方法的调用情况。

能观察到的范围为:返回值抛出异常入参,通过编写 OGNL 表达式进行对应变量的查看。

watch com.example.demo.arthas.user.UserController * '{params,throwExp}' -e

观察指定的类(UserController),输出执行函数的入参和返回结果:
*:所有函数  
params:入参
throwExp:异常

 

通过页面调用抛出异常方法,可以看到,内部的入参,返回结果和异常信息。

这里也可以指定将信息输出到文件中 ,默认文件的保存地址,用户路径下logs/arthas-cache

我这里是windows本地启动项目:路径就在项目根路径

watch com.example.demo.arthas.user.UserController * '{params,throwExp}' -e > exp.log

 redefine

加载外部的.class文件,redefine jvm已加载的类。。

注意, redefine后的原来的类不能恢复,redefine有可能失败(比如增加了新的field),参考jdk本身的文档。

 这里是将代码变更后编译新的class文件,替换掉路径下的原有class文件。然后执行命令对jvm中加载的类进行替换。

redefine E:/EDU-WORKSPACE/spring-boot-inside-master/demo-arthas-spring-boot/target/classes/com/example/demo/arthas/user/UserController.class

ognl  

执行ognl表达式

调用静态函数,在控制台进行输出:

ognl '@java.lang.System@out.println("hello world")'

查看类内属性:现在要查看logger实现方式,属性。

 

ognl '@com.example.demo.arthas.user.UserController@logger'

再此可以看到实现方式是通过logback,日志级别是空。要找到日志级别就需要继续向上。

可以看到路径在向上走,但是上一级的level还是空,就需要继续向上,.parent。

到该位置就能看到根节点的日志级别,下级的日志级别是集成下来的。

修改日志level:

获取logger,然后拿到类中静态字段DEBUG,setLevel更改日志级别。

ognl '@org.slf4j.LoggerFactory@getLogger("root").setLevel(@ch.qos.logback.classic.Level@DEBUG)'

可以看到,日志级别已经变更为debug。(调试完整记得将级别修改回去)

 查看当天日志使用的是哪个配置文件:

ognl '#map1=@org.slf4j.LoggerFactory@getLogger("root").loggerContext.objectMap,#map1.get("CONFIGURATION_WATCH_LIST")'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值