问题描述

[arthas@1]$ trace cn.xx.dataservice.biz.dataservice.controller.v1.CommonSearchController datasetQuery
Affect(class count: 1 , method count: 1) cost in 262 ms, listenerId: 1
Enhance error! exception: java.lang.UnsupportedOperationException: class redefinition failed: attempted to change the schema (add/remove fields)
error happens when enhancing class: class redefinition failed: attempted to change the schema (add/remove fields), check arthas log: /root/logs/arthas/arthas.log
# tail -100 /root/logs/arthas/arthas.log
2022-11-24 13:57:21 [arthas-NettyHttpTelnetBootstrap-3-1] INFO c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0xb7343ee3, L:/127.0.0.1:3658] ACTIVE
2022-11-24 13:57:21 [arthas-NettyWebsocketTtyBootstrap-4-1] INFO c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0x4b708046] REGISTERED
2022-11-24 13:57:21 [arthas-NettyWebsocketTtyBootstrap-4-1] INFO c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0x4b708046] BIND: /127.0.0.1:8563
2022-11-24 13:57:21 [arthas-NettyWebsocketTtyBootstrap-4-1] INFO c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0x4b708046, L:/127.0.0.1:8563] ACTIVE
2022-11-24 13:57:21 [arthas-NettyWebsocketTtyBootstrap-4-2] INFO c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0xd9e71848] REGISTERED
2022-11-24 13:57:21 [arthas-NettyWebsocketTtyBootstrap-4-2] INFO c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0xd9e71848] BIND: local:arthas-netty-localaddress
2022-11-24 13:57:21 [arthas-NettyWebsocketTtyBootstrap-4-2] INFO c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0xd9e71848, L:local:arthas-netty-localaddress] ACTIVE
2022-11-24 13:57:21 [arthas-binding-thread] INFO c.t.a.core.server.ArthasBootstrap -as-server listening on network=127.0.0.1;telnet=3658;http=8563;timeout=6000;
2022-11-24 13:57:21 [arthas-binding-thread] INFO c.t.a.core.server.ArthasBootstrap -as-server started in 1285 ms
Arthas server already bind.
2022-11-24 13:57:21 [arthas-NettyHttpTelnetBootstrap-3-1] INFO c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0xb7343ee3, L:/127.0.0.1:3658] READ: [id: 0x082ba92d, L:/127.0.0.1:3658 - R:/127.0.0.1:39284]
2022-11-24 13:57:21 [arthas-NettyHttpTelnetBootstrap-3-1] INFO c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0xb7343ee3, L:/127.0.0.1:3658] READ COMPLETE
2022-11-24 13:57:22 [arthas-NettyHttpTelnetBootstrap-3-2] INFO c.t.a.core.shell.term.impl.Helper -Loaded arthas keymap file from com/taobao/arthas/core/shell/term/readline/inputrc
2022-11-24 13:57:35 [arthas-command-execute] INFO c.t.arthas.core.advisor.Enhancer -enhance matched classes: [class cn.seres.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController]
2022-11-24 13:57:35 [arthas-command-execute] ERROR c.t.arthas.core.advisor.Enhancer -Enhancer error, matchingClasses: [class cn.seres.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController]
java.lang.UnsupportedOperationException: class redefinition failed: attempted to change the schema (add/remove fields)
at sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
at sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:144)
at com.taobao.arthas.core.advisor.Enhancer.enhance(Enhancer.java:396)
at com.taobao.arthas.core.command.monitor200.EnhancerCommand.enhance(EnhancerCommand.java:168)
at com.taobao.arthas.core.command.monitor200.EnhancerCommand.process(EnhancerCommand.java:115)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process(AnnotatedCommandImpl.java:82)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access$100(AnnotatedCommandImpl.java:18)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:111)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:108)
at com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessTask.run(ProcessImpl.java:385)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
2022-11-24 14:00:07 [arthas-NettyHttpTelnetBootstrap-3-2] ERROR io.termd.core.io_error -Reported io error => closing
java.lang.NoClassDefFoundError: one/profiler/AsyncProfiler
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethod(Class.java:2128)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.shouldOverridesName(AnnotatedCommandImpl.java:33)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.name(AnnotatedCommandImpl.java:51)
at com.taobao.arthas.core.shell.system.impl.InternalCommandManager.getCommand(InternalCommandManager.java:131)
at com.taobao.arthas.core.shell.system.impl.InternalCommandManager.getCommand(InternalCommandManager.java:41)
at com.taobao.arthas.core.shell.system.impl.JobControllerImpl.createProcess(JobControllerImpl.java:154)
at com.taobao.arthas.core.shell.system.impl.JobControllerImpl.createJob(JobControllerImpl.java:88)
at com.taobao.arthas.core.shell.system.impl.GlobalJobControllerImpl.createJob(GlobalJobControllerImpl.java:57)
at com.taobao.arthas.core.shell.impl.ShellImpl.createJob(ShellImpl.java:98)
at com.taobao.arthas.core.shell.handlers.shell.ShellLineHandler.createJob(ShellLineHandler.java:83)
at com.taobao.arthas.core.shell.handlers.shell.ShellLineHandler.handle(ShellLineHandler.java:61)
at com.taobao.arthas.core.shell.handlers.shell.ShellLineHandler.handle(ShellLineHandler.java:17)
at com.taobao.arthas.core.shell.handlers.term.RequestHandler.accept(RequestHandler.java:22)
at com.taobao.arthas.core.shell.handlers.term.RequestHandler.accept(RequestHandler.java:10)
at io.termd.core.readline.Readline$Interaction.end(Readline.java:231)
at io.termd.core.readline.Readline$Interaction.access$000(Readline.java:187)
at io.termd.core.readline.Readline$2.apply(Readline.java:487)
at io.termd.core.readline.Readline$Interaction.handle(Readline.java:272)
at io.termd.core.readline.Readline$Interaction.access$200(Readline.java:187)
at io.termd.core.readline.Readline.deliver(Readline.java:121)
at io.termd.core.readline.Readline.access$500(Readline.java:38)
at io.termd.core.readline.Readline$Interaction$2.accept(Readline.java:435)
at io.termd.core.readline.Readline$Interaction$2.accept(Readline.java:429)
at io.termd.core.tty.TtyEventDecoder.accept(TtyEventDecoder.java:93)
at io.termd.core.tty.TtyEventDecoder.accept(TtyEventDecoder.java:26)
at io.termd.core.tty.ReadBuffer.accept(ReadBuffer.java:44)
at io.termd.core.tty.ReadBuffer.accept(ReadBuffer.java:28)
at io.termd.core.io.BinaryDecoder.write(BinaryDecoder.java:117)
at io.termd.core.io.BinaryDecoder.write(BinaryDecoder.java:65)
at io.termd.core.telnet.TelnetTtyConnection.onData(TelnetTtyConnection.java:139)
at io.termd.core.telnet.TelnetConnection.flushData(TelnetConnection.java:267)
at io.termd.core.telnet.TelnetConnection.flushDataIfNecessary(TelnetConnection.java:257)
at io.termd.core.telnet.TelnetConnection.receive(TelnetConnection.java:108)
at io.termd.core.telnet.netty.TelnetChannelHandler.channelRead(TelnetChannelHandler.java:47)
at com.alibaba.arthas.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at com.alibaba.arthas.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at com.alibaba.arthas.deps.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at com.alibaba.arthas.deps.io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at com.alibaba.arthas.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at com.alibaba.arthas.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at com.alibaba.arthas.deps.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at com.alibaba.arthas.deps.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
at com.alibaba.arthas.deps.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
at com.alibaba.arthas.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
at com.alibaba.arthas.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
at com.alibaba.arthas.deps.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
at com.alibaba.arthas.deps.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at com.alibaba.arthas.deps.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at com.alibaba.arthas.deps.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.lang.ClassNotFoundException: one.profiler.AsyncProfiler
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at com.taobao.arthas.agent.ArthasClassloader.loadClass(ArthasClassloader.java:34)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 52 common frames omitted
[arthas@1]$ sm -d cn.seres.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController
declaring-class cn.seres.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController
constructor-name <init>
modifier public
annotation
parameters
exceptions
classLoaderHash 66629f63 declaring-class cn.xx.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController
constructor-name <init>
modifier private
annotation
parameters cn.xx.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController$auxiliary$OrIwA4e9
exceptions
classLoaderHash 66629f63 declaring-class cn.xx.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController
method-name datasetQuery$original$1pV75W4b
modifier private
annotation
parameters java.lang.String
java.lang.String
cn.seres.bd.dataservice.common.dto.page.PageRequest
return cn.seres.bd.dataservice.common.dto.CommonResponse
exceptions cn.seres.bd.dataservice.common.exception.CommonException
classLoaderHash 66629f63 declaring-class cn.xx.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController
method-name datasetQuery
modifier public
annotation org.springframework.web.bind.annotation.PostMapping,io.swagger.annotations.ApiOperation
parameters java.lang.String
java.lang.String
cn.xx.bd.dataservice.common.dto.page.PageRequest
return cn.xx.bd.dataservice.common.dto.CommonResponse
exceptions cn.xx.bd.dataservice.common.exception.CommonException
classLoaderHash 66629f63 declaring-class cn.xx.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController
method-name datasetQuery$original$1pV75W4b$accessor$yu3zRiZn
modifier final
annotation
parameters java.lang.String
java.lang.String
cn.xx.bd.dataservice.common.dto.page.PageRequest
return cn.xx.bd.dataservice.common.dto.CommonResponse
exceptions cn.xx.bd.dataservice.common.exception.CommonException
classLoaderHash 66629f63 declaring-class cn.xx.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController
method-name getSkyWalkingDynamicField
modifier public
annotation
parameters
return java.lang.Object
exceptions
classLoaderHash 66629f63 declaring-class cn.xx.bd.dataservice.biz.dataservice.controller.v1.CommonSearchController
method-name setSkyWalkingDynamicField
modifier public
annotation
parameters java.lang.Object
return void
exceptions
classLoaderHash 66629f63 Affect(row-cnt:7) cost in 33 ms.

问题原因

出现这个异常的原因是很明确的,在更新字节码时,增加/删除了field。可能有下面的原因:

  • JDK的bug,尽量用最新的JDK版本,特别是JDK8

比如: redefine热更新报错 #969 (comment)

  • 其它的java agent修改了字节码,增加了 field。

比如jacoco,这个代码测试覆盖率工具,它会在类里增加一个static field来记录执行信息。

  • 其它的java agent修改了字节码,但是在retransform时,生成同样的字节码

比如skywalking: 无法trace 和watch加载skywalking7 的jar中的类方法 #1141

  • 在执行arthas redefine/retransform命令时,用户自己想替换的字节码有修改

可能是用户本地的JDK版本和线上的JDK版本不一致导致的

可能是用户自己修改了源码

解决方法

暂时关闭 skywalking

X参考文献

[arthas] UnsupportedOperationException: class redefinition failed: attempted to change the schema (add/remove fields)的更多相关文章

  1. How to change SAPABAP1 schema password In HANA

    Symptom How to change SAPABAP1 schema password Environment HANA 1.x HANA 2.x Resolution Shutdown the ...

  2. 记一次多个Java Agent同时使用的类增强冲突问题及分析

    摘要:Java Agent技术常被用于加载class文件之前进行拦截并修改字节码,以实现对Java应用的无侵入式增强. 本文分享自华为云社区<记一次多个JavaAgent同时使用的类增强冲突问题 ...

  3. RAC的QA

    RAC: Frequently Asked Questions [ID 220970.1]   修改时间 13-JAN-2011     类型 FAQ     状态 PUBLISHED   Appli ...

  4. removing vmware debugger from visual studio

    removing vmware debugger from visual studio by Ross on 十月 14, 2010 at 5:30 下午 under Visual Studio |  ...

  5. Java面试题之基础篇概览

    Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...

  6. RMAN DUPLICATE DATABASE with SET NEWNAME failed: RMAN-05501 RMAN-05517 (Doc ID 387093.1)

    RMAN DUPLICATE DATABASE with SET NEWNAME failed: RMAN-05501 RMAN-05517 (Doc ID 387093.1) APPLIES TO: ...

  7. Failed to load or instantiate

    Failed to load or instantiate: add this code in your xml: xmlns:android="http://schemas.android ...

  8. EF6 Database First (DbContext) - Change Schema at runtime

    Problem:There are two SQL databases (dev and live) with on Azure which has identical table structure ...

  9. How to: Change icon in Inno Setup

    1. Change the installer executable icon or the icon showed in Start Menu folder Using SetupIconFile ...

  10. Arrays.asList()生成的List抛UnsupportedOperationException分析

    一.背景:使用工具类 Arrays.asList()把数组转换成集合时,使用其修改集合相关的方 法,它的 add/remove/clear 方法会抛出 UnsupportedOperationExce ...

随机推荐

  1. visio2019 破解

    链接:https://pan.baidu.com/s/14AU8GFXhgjp87pK1bIK8UA?pwd=ju61 提取码:ju61 --来自百度网盘超级会员V5的分享 可能需要关闭防火墙和win ...

  2. Linux命令之nc命令

    1.简介 nc是netcat的简写,是一个功能强大的网络工具,有着网络界的瑞士军刀美誉.nc命令在linux系统中实际命令是ncat,nc是软连接到ncat.nc命令的主要作用如下: 实现任意TCP/ ...

  3. js使用sort将JSON数据进行排序

    在把数据通过Echarts展示成统计图模式时,柱状统计图需要将数据进行从大到小来排序! 下面为所需要的数据: 1 { 2 mapData: [ 3 {name: '北京',value: '555'}, ...

  4. 基础实验之access/trunk/valn/vlanif/静态路由

     实验要求 1,PC1,PC2,PC3,PC4分别属于VLAN10,20,30,40 2,PC1,PC2,PC3,PC4互通 步骤1:PC1,2,3,4分别配置IP,并在SW6,SW7分别配置网关,并 ...

  5. C#/.Net 部分缩写

    CTS(Common Type System):通用类型系统:指定最基本类型便于.Net Framework的各种语言之间进行交互. CLR(Common Language Runtime):.Net ...

  6. Linux习题

    1.判断/etc/inittab文件是否大于100行,如果大于,则显示"/etc/inittab is a big file."否者显示"/etc/inittab is ...

  7. 点击按钮触发div颜色改变的几种写法

    目录 JavaScript 行内事件 onclick绑定 关于选取元素 关于改变颜色 addEventListener jQuery 获取元素 绑定事件 设置样式 css() 添加class Vue ...

  8. C++多线程编程之【线程管理】

    1.如何启动线程? 构建std::thread对象即可. 直接传函数名(地址) 创建一个类并创建伪函数. 构建对象(实例化),将对象作为参数传入thread对象实例化. 2.为什么要等待线程? 首先必 ...

  9. python学习记录(三)-数据类型

    字符串格式化 var = 'abcde' # 切片 print(var[2],var[-1]) # c e print(var[1:3:1],var[-2:-5:-1],var[::-1]) # bc ...

  10. ORACLE ORA-12638:身份证明检索失败

    使用PLSQL连接远程数据库时,有时候会遇到提示ORA-12638:身份证明检索失败的问题,怎么办呢?有两种方法,选择一种更改就行了,网络上大多是第一种方法,如果已经找过不是你想要的答案,那不妨直接看 ...