首页 > 其他分享 >使用Arthas热更新线上代码

使用Arthas热更新线上代码

时间:2022-12-15 09:00:13浏览次数:75  
标签:redefine 代码 更新 命令 线上 Arthas

一般线上问题比开发环境的问题更难解决,一个主要的原因便在于开发态可以任意 debug 断点调试,而线上环境一般不允许远程调试,所以在实践中,我一般习惯用 Arthas 来定位线上的问题。

Arthas 是阿里巴巴开源的 Java 应用诊断利器

Arthas 可以完成很多骚操作,今天给大家介绍的 Arthas 诊断技巧便是 – 热更新线上代码

前置需求

     排查发现线上代码HelloWorld.java文件中某个方法的代码有NPE问题,需要通过arthas热更解决

实施步骤

    1、首先准备好要热更的字节码文件,可本地通过IDE编译生成,也可通过arthas提供的jad和mc命令配合生成

    2、通过sc命令查找类的加载器

    3、通过redefine命令热更

 

热更新注意事项

redefine 特别说明

redefine 命令和 jad/watch/trace/monitor/tt 等命令会冲突。

执行完 redefine 之后,如果再执行上面提到的命令,则会把 redefine 的字节码重置。

原因是 jdk 本身 redefine 和 Retransform 是不同的机制,同时使用两种机制来更新字节码,只有最后修改的会生效。

条件限制

使用热更新功能有一些条件限制,我们只能用它来修改方法内部的一些业务代码,如果我们出现了以下任意一种情况,那么热更新就会执行失败:

  1. 增加类属性(类字段);
  2. 增加或删除方法;
  3. 替换正在运行的方法。

标签:redefine,代码,更新,命令,线上,Arthas
From: https://www.cnblogs.com/csnjava/p/16984212.html

相关文章

  • 代码随想录Day41
    LeetCode538.把二叉搜索树转化为累加树给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(GreaterSumTree),使每个节点node 的新值等于原树中大于或等......
  • HarmonyOS实现登录页面(五)config.json代码(打开网络权限+去掉顶部lable+改为发送http明
    config.json新增代码:打开网络权限"reqPermissions":[{//打开网络权限"name":"ohos.permission.INTERNET"}]新增代码:去掉上边栏lable"met......
  • Git提交代码报错husky > pre-commit
    在接触了Git版本控制之后,很长一段时间里就只使用commit、pull、push这三个命令,并没有进行深究。而早上在用commit代码提交前端代码的时候出现了报错信息husky>pre-commit......
  • go代码调试之vscode设置环境变量
    go代码调试之vscode设置环境变量只能通过vscode的debug的形式允许测试代码,不能通过gotest获取1.创建lauch.json文件2.然后在项目目录中会自动创建.vscode的目录3.在......
  • GIt代码托管服务
    一、常用的git代码托管服务Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常......
  • 线上功能出现卡顿如何排查?
    线上功能出现卡顿如何排查?1、首先通过查看微服务上的日志,通过查看代码段之间的耗时进行定位2、拿线上卡顿功能的相关sql去生产环境跑一下,是否是慢sql,是否需要进行sql优化......
  • PHPstorm配置PHP_CodeSniffer代码检查工具
    目录1.PHPCodeSniffer介绍2.安装PHP_CodeSniffer3.使用PHPStorm设置PHPCS4.测试PHP_CodeSniffer的检测功能参考资料1.PHPCodeSniffer介绍PHP_CodeSniffer对PHP文......
  • 一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障
    “本文作者是曾有4年开发经验,期间担任过多个项目团队的开发leader,现任Kindling开源团队的产品经理。作者曾因一次愚蠢的操作引发了线上P0故障,导致月工资扣了10%,年底绩效-1,......
  • xml数据转yolov5的txt代码
    通过labelimg标注的xml文件转换yolov5可训练的txt格式代码。包含读取xml文件代码,保存txt格式代码。  fromlxml.etreeimportElement,SubElement,tostring,Elem......
  • LeaRun.net代码生成器 一键生成前后端代码
    自动代码生成是指根据自然语言的功能描述来生成代码。在项目开发过程中,有很多业务模块的代码是具有一定规律性的,例如controller控制器、service接口、service实现类、mappe......