Arthas有个问题不知道能不能解决,我有个class想通过arthas 的retansform 命令加载进去,这个类我只改了方法中的一个参数类型,HashMap改成了LinkedHashMap,加载失败了,报下面错误:
retransform error! java.lang.UnsupportedOperationException: class redefiniti
请问有方法解决吗?修改类中的哪些东西不会报这个错误呢?
Arthas的retransform命令在加载类时,会检查类的字节码是否与当前运行的类一致。如果修改了类中的某个方法的参数类型,可能会导致字节码不一致,从而引发UnsupportedOperationException错误。
要解决这个问题,你可以尝试以下方法:
-Xrs
参数启用Redefine支持。这将允许你在运行时修改类的定义。例如:java -jar arthas-boot.jar your_app_name --watch redefine --rs
-Xrs
参数,可以考虑将修改后的类重新编译成字节码文件,然后使用-cp
参数指定新的字节码文件路径。例如:java -cp /path/to/your/new/classes your_main_class
pom.xml
文件中添加以下依赖:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
然后在运行应用时添加--spring-boot-devtools
参数:
java -jar your_app_name.jar --spring-boot-devtools
这样,当你修改类并保存时,应用会自动重启并重新加载类定义,而不会引发错误。
Arthas的retransform命令在加载类时,会检查类的字节码是否与当前类的版本一致。如果修改了类中的某个方法的参数类型,可能会导致字节码不一致,从而引发UnsupportedOperationException异常。
要解决这个问题,你可以尝试以下方法:
-XX:+RedefineClasses
和-XX:+PreserveFramePointer
参数启动Java虚拟机(JVM),这样可以让JVM在重新定义类时保留旧类的帧指针信息。例如:java -XX:+RedefineClasses -XX:+PreserveFramePointer -jar your_arthas_agent.jar
spring-boot-devtools
插件来自动重启应用。这个插件会在检测到类文件发生变化时自动重启应用,而不需要手动重启。要使用这个插件,你需要在你的pom.xml
文件中添加以下依赖:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
然后,在运行应用时添加--spring-boot-devtools.restart.enabled=true
参数:
java -jar your_app.jar --spring-boot-devtools.restart.enabled=true
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。