如何不重启热更新线上 Java 代码?

热更新部署代码jar包 热更新示例可以便于服务器端进行热部署 !图表设计实际上就是数据可视化设计,美观的图表设计可以让数据分析变得轻松、流畅、并且易读,将更有助于提高用户的工作效率,降低用户的工作负担。RDP报表工具不仅具有经典美观的图表展现,而且可以提供丰富的图表样式,基本涵盖Excel中的所有图表样式,包括:柱形图、折线图、饼图和圆环图、圆环图、条形图、面积图、XY(散点)图和气泡图、气泡图、股价图、雷达图、树状图、旭日图、直方图、瀑布图、漏斗图以及组合图。为了更进一步地满足用户的需求,RDP报表工具同时也致力于呈现大型化、高清晰化、超高分辨率的图形展示,RDP大屏幕数据展示以直观、多维、实时、动态、交互、联动的视觉冲击力带领用户领略数据可视化的独特魅力! 立即下载

一、前言

热更新代码的场景

1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的手段来增加调试代码

2)线上出现紧急bug,通过Review代码找到问题,修改好后打包部署的流程可能比较久,可以通过热部署代码及时解决问题。

二、Arthas的使用

使用阿里巴巴开源的Java诊断工具---Arthas,他可以附着在我们的Java服务器进程上面,查看服务器状态,jvm状态等各种参数指标,还可以进行热更新。

1、下载启动Arthas

wget https://alibaba.github.io/arthas/arthas-boot.jarjava -jar arthas-boot.jar

2、启动后会显示当前机器上面所有的java进程,选择我们需要监控/修改的进程,输入序号回车

3、一些常用命令,如果线上出现问题,可以通过以下命令查看各项指标是否有异常

dashboard——当前系统的实时数据面板
thread——查看当前 JVM 的线程堆栈信息
jvm——查看当前 JVM 的信息
sysprop——查看和修改JVM的系统属性
sysenv——查看JVM的环境变量
getstatic——查看类的静态属性


1)打印前五名最消耗CPU的线程,可以及时找到CPU过高的代码位置

thread -n 5

2)查看某个函数的调用堆栈

stack <类全包名> <函数名>

3)查看某个函数的哪个子调用最慢,耗时最久的调用会标红显示,可以方便找出某个功能中最耗时的操作

trace <类全包名> <函数名>

4)监控某个函数的调用统计数据,包括总调用次数,平均运行时间,成功率等信息

monitor <类全包名> <函数名>

4、输入exit可以退出当前的连接,但是附着在服务器进程上的Arthas依然在运行,完全退出可以输入shutdown

三、热更新

1、首先找到我们需要更新代码的全包名,通过jad命令将线上正在运行的代码反编译出来

jad --source-only <全包名> > <导出目录+文件名>

2、拿到java代码后,我们根据需求来修改代码,需要注意的是这里热更新代码的实际原理是调用Java基础类java.lang.instrument.Instrumentation的redefineClasses方法,他可以通过修改字节码来替换已有的class文件,其中有诸多的限制:

1)比如不能增加或删除field/method

2)没有退出的函数不能生效,比如一个函数体内是一个where(true)循环,永远不会结束,那么我们修改的代码也永远不会生效

我们可以在函数中增加一些代码,比如增加日志打印等

3、修改好代码后,我们要找到这个这个类对应的类加载器,再去加载这个class,执行如下命令会返回类加载器的对象地址

sc -d <全包名> | grep classLoaderHash

4、通过内存编译将Java文件编译成Class文件

mc -c <类加载器的对象地址> <Java文件所在目录+文件名>

5、最后,我们通过命令将class文件进行热更新

redefine <Class文件所在目录+文件名>

6、更新完毕不出意外会立即生效,这时候就可以去验证代码是否生效了

动态加载jar包的实现 一个工具类实现了动态加载jar包 在不重启服务器的情况下,可以调用jar包的class 立即下载

相关推荐

java类重载,可以用于热更新

这个是用来java中类的重载的,可以拟补java作为静态语言的一些问题

【致远FAQ】致远OA启动不起来了(下集)

恢复了更新补丁包备份seeyon,仍无法启动协同服务 问题现象: 恢复了更新补丁包备份seeyon,仍无法启动协同服务 处理方法: 检查webapps目录下是否存在备份seeyon文件夹 移除webapps目录下备份的seeyon文件夹。 初始化Spring失败 问题现象: 启动协同服务,控制台输出【初始化Spring失败】【could not execute update query】 解决方法: 检查关键日志ApacheJetspeed/logs_sy/spring.log,本例

致远OA的博客 2954

从零到一:在Ubuntu 20.04上搭建ROS1与PX4无人机开发环境

本文详细指导如何在Ubuntu 20.04系统上搭建完整的ROS1与PX4无人机开发环境。内容涵盖ROS Noetic安装、PX4固件源码编译、MAVROS通信桥接以及QGroundControl地面站的配置,并通过Gazebo仿真完成全链路联调测试,为无人机算法开发与验证提供稳定可靠的基础平台。

weixin_29292431的博客 168

热加载原理解析与实现

热加载可以在修改完代码后,不重启应用,实现类信息更新,以节省开发时等待启动时间。本文主要从热加载概念、原理、常见框架、实现等角度为你揭开热加载的层层面纱。

Java技术江湖 3082

生物信息学投稿避坑指南:如何根据影响因子和审稿速度选择最适合的期刊

本文为生物信息学研究者提供全面的期刊投稿策略,重点解析影响因子、审稿速度等关键指标,帮助选择最适合的期刊。涵盖算法开发类和应用型研究的投稿路径,分析不同出版社特点及开放获取的利弊,并提供投稿全流程优化建议,助力高效发表研究成果。

weixin_42652674的博客 380

RC正弦波振荡电路实验全解析:如何通过调节电容电阻改变输出频率

本文深入解析RC正弦波振荡电路,重点阐述如何通过调节电容和电阻来精确改变输出频率。文章从文氏桥振荡电路的核心原理出发,详细介绍了电容粗调频段与电阻微调频率的实操策略,并分析了元件误差、寄生参数等对实测频率的影响,为电路设计与调试提供了从理论到实践的完整指南。

yhn456789的博客 1116

JVM SandBox简要介绍

JVM-SANDBOX(沙箱)实现了一种在不重启、不侵入目标JVM应用的AOP解决方案。 沙箱的特性 无侵入:目标应用无需重启也无需感知沙箱的存在 类隔离:沙箱以及沙箱的模块不会和目标应用的类相互干扰 可插拔:沙箱以及沙箱的模块可以随时加载和卸载,不会在目标应用留下痕迹 多租户:目标应用可以同时挂载不同租户下的沙箱并独立控制 高兼容:支持JDK[6,11] 沙箱常见应用场景 线上故障定位 线上系统流控 线上故障模拟 方法请求录制和结果回放 动态日志打印 安全信息监测和脱敏 .

weixin_36996888的博客 1万+

【异常】OpenClaw网关仪表盘 pairing required 报错排查与解决方案

在OpenClaw网关仪表盘页面,完成WebSocket URL、网关令牌等必填项配置后,点击「连接」按钮尝试建立网关连接时,页面下方出现红色报错提示框,核心报错内容为,无法完成网关连接建立,且该报错在令牌配置正确、网络链路通畅的场景下仍会触发。该报错常见于非本地回环地址的访问场景,包括局域网远程访问、公网域名/IP访问、云服务器部署的网关远程管理等场景,本地127.0.0.1回环地址访问通常可正常连接。

奶爸的编程之路,也就一周冷个三天 1082

Java线上环境热部署

【代码】Java线上环境热部署。

qq_34929111的博客 275

【华为OD机试】贪吃蛇(python, java, c++, js)

贪吃蛇是一个经典游戏,蛇的身体由若干方格连接而成,身体随蛇头移动。蛇头触碰到食物时,蛇的长度会增加一格。蛇头和身体的任一方格或者游戏版图边界碰撞时,游戏结束。 下面让我们来完成贪吃蛇游戏的模拟。 给定一个NM的数组arr,代表NM个方格组成的版图,贪吃蛇每次移动一个方格。 若arr[i][j] == H,表示该方格为贪吃蛇的起始位置; 若arr[i][j] == F,表示该方格为食物, 若arr[i][j] == E,表示该方格为空格。 贪吃蛇初始长度为1,初始移动方向为向左。

A_D_I_D_A_S的博客 542

DTI-ALPS 指标计算(附代码),评估脑类淋巴系统功能

DTI-ALPS 指标计算(附代码),评估脑类淋巴系统功能

xxx 1054

分享一个很好用的Java热更新插件——ArthasHotSwap

分享一个很好用的热更新插件ArthasHotSwap

fengxiandada的博客 1175

17、神经网络训练算法与高阶模糊Cohen - Grossberg神经网络稳定性分析

本文介绍了一种新的数据驱动算法用于神经网络训练,该算法继承三次样条权重函数的优点,具有简单架构和良好泛化性能,并通过并行机制显著提升训练速度。同时,研究了高阶模糊Cohen-Grossberg神经网络(HOFCGNN)在可变及无界延迟下的稳定性,利用M矩阵理论和向量Lyapunov函数方法,证明了系统平衡点的存在性、唯一性和全局指数稳定性。研究成果为神经网络的高效训练与稳定应用提供了理论支持和技术路径。

b9c0d的博客 149

Java对线_不重启Java服务,如何对线上代码快速热更新?

需要热更新代码的场景(1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的手段来增加调试代码(2)线上出现紧急bug,通过Review代码找到问题,修改好后打包部署的流程可能比较久,可以通过热部署代码及时解决问题Arthas的使用使用阿里巴巴开源的Java诊断工具---Arthas,他...

weixin_35757191的博客 384

(数字图像处理MATLAB+Python)第五章图像增强-第一节:图像增强概述和基于灰度级变换的图像增强

图像增强(Image Enhancement):指不考虑图像降质原因,利用各种数学方法和变换手段,增强图像中人们感兴趣部分或提高有用的图像特征的清晰度。从图像质量来看,图像增强提高了图像的可懂度,改善了图像的视觉效果例如在现实场景中,针对那些对比度较差、视觉效果不好的图像,我们就可以利用图像增强改善视觉质量图像增强可分为如下几种基于灰度级变换的图像增强基于直方图修正的图像增强基于照度反射模型的图像增强基于模糊技术的图像增强基于伪彩色处理的图像增强其他图像增强方法分段线性灰度级变换。

快乐江湖的博客 3335

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

如何不重启热更新线上 Java 代码?

作者:未分配微服务 https://www.cnblogs.com/orange911/p/10583245.html 一、前言 热更新代码的场景 1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的手段来增加调试代码 2)线上出现紧急bug,通过Review代码找到问题,修改好后打包部署的流程可能比较久,可以通过热部署代码及时解决问题。 二、Arthas的使用 使用阿里巴巴开源的Java..

Java技术栈,分享最主流的Java技术 1396

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何不重启更新java线上代码_如何不重启热更新线上 Java 代码?

一、前言热更新代码的场景1)当线上 服务器 出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加 打印日志 或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过 热部署 的手段来增加调试代码2)线上出现紧急bug,通过 Review 代码找到问题,修改好后打包部署的流程可能比较久,可以通过热部署代码及时解决问题。二、Arthas的使用使用阿里巴巴开源的Java诊断工具...

weixin_34456422的博客 474

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java 不重启部署_如何不重启热更新线上 Java 代码?

一、前言热更新代码的场景1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的手段来增加调试代码2)线上出现紧急bug,通过Review代码找到问题,修改好后打包部署的流程可能比较久,可以通过热部署代码及时解决问题。二、Arthas的使用使用阿里巴巴开源的Java诊断工具---Artha...

weixin_34293588的博客 536

如何不重启更新java线上代码_如何不重启热更新线上 Java 代码?

一、前言热更新代码的场景1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的手段来增加调试代码2)线上出现紧急bug,通过Review代码找到问题,修改好后打包部署的流程可能比较久,可以通过热部署代码及时解决问题。二、Arthas的使用使用阿里巴巴开源的Java诊断工具---Artha...

weixin_34570507的博客 213
上一篇: Spring Boot 最核心的 25 个注解,都是干货!
下一篇: 怎么对 Java 程序调优?不看别后悔!
Java奥利给
博客等级 码龄6年 150粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值