java 字节增强技术 agent

arthas

arthas 是一款使用agent技术工具,使用java -jar 的方式运行,可以进行无侵入式的对java程序进行类似切面的增强,达到计算耗时等功能。主要特点就是,使用了字节码增强技术,不会中断程序也不会修改代码;

  • 启动
java -jar arthas-boot.jar
  • 诊断死循环
thread -all  # 查询所有线程
thread -n 4  # 查询cpu占比最高的4个线程
# 查询id为58的线程的调用链
thread 58
  • 修改代码…
# search-class -d detail
sc -d com.test.Simulate | grep classLoaderHash
# memory compiler 生成class文件 -c classloader
mc -c 18b4aac2 src/main/java/com/test/Simulate.java
# 加载外部 class 文件
retransform com/test/Simulate.class
# 反编译指定已加载类的源码 byte code to java code
jad com.test.Simulate
# 重制加强类 (全部)
reset

常见问题:

arthas 和 skywalking 一起使用时,arthas 报错:attempted to change the schema;造成这个的原因是 skywalking 底层是用的 ByteBuddy 去进行类结构的一个重写,ByteBuddy 会用随机生成的一个名字生成辅助类。其他的 agent 像 arthas 要再去增强这个类的时候,就又会去触发 SkyWalking 去重新生成一个辅助类,这个再次生成后的辅助类跟原先的辅助类就会造成冲突,在JVM 字节码校验的时候会看到两个辅助类,且是不一致的,就会去报出类结构异常 JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED

解决方案:在Skywalking里面开启缓存,在VM运行参数里加上:

-Dskywalking.agent.is_cache_enhanced_class=true

  • 有两种缓存模式:任选其一

-Dskywalking.agent.class_cache_mode=MEMORY // 使用内存

-Dskywalking.agent.class_cache_mode=FILE // 使用文件’/class-cache’

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值