漫画:Java如何实现热更新?(上)

简介: 漫画:Java如何实现热更新?

image.png


image.png


image.png


image.png


image.png


image.png


Arthas(阿尔萨斯)是 Alibaba 开源的一款 Java 诊断工具,使用它我们可以监控和排查 Java 程序,然而它还提供了非常实用的 Java 热更新功能。


所谓的 Java 热更新是指在不重启项目的情况下实现代码的更新与替换。使用它可以实现不停机更新 Java 程序,尤其是对那些启动非常耗时的 Java 项目来说,更是效果显著。


Arthas 的使用其实非常简单,它为我们提供了一个 Jar 包,我们只需要把这个 Jar 下载到本地,然后运行这个 Jar 包就可以正常使用它的功能了。


Arthas 功能简述


当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决(来自官方):


  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?


Arthas 支持 JDK 6+,支持 Linux/Mac/Winodws,它采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。


Arthas 使用


Arthas 的使用步骤如下。


步骤一:下载 Arthas


首先,我们先把 Arthas 的 Jar 包下载到本地,它的下载地址是:https://alibaba.github.io/arthas/arthas-boot.jar


步骤二:启动 Arthas


我们只需要使用普通的 jar 包启动命令:java -jar arthas-boot.jar 来启动 Arthas 即可,启动成功之后的运行界面如下:


image.png


如上图所示则表示 Arthas 启动成功。


小贴士:当我们运行 java -jar arthas-boot.jar 命令时,首先需要先切换目录至该 jar 包的位置,才能正常的启动 Arthas。


步骤三:运行 Arthas


当我们启动完 Arthas 之后,根据上图的提示,我们需要选择一个要调试的 Java 进程,例如我们输入“4”来监测我自己写的一个 Java 测试程序,执行结果如下:


image.png


当出现 Arthas 的 logo 之后,表示 Arthas 正常加载了 Java 进程。


步骤四:操作 Arthas


当 Arthas 加载 Java 进程成功之后,我们就可以输入相关的命令来查看相关的信息了。


假如我们把本地环境视为生产服务器,我们此时需要查看某个运行的 Java 程序是否为最新版的。


在没有 Arthas 之前,我们通常的步骤是这样的:


  1. 找到相应的 jar 包(或者 war 包);
  2. 将 jar 包(或者 war 包)下载到本地;
  3. 找出相应的类进行解压操作;
  4. 然后将解压的 class 文件拖拽到 Java 编译器(Idea 或 Eclipse)中,查看是否为最新的代码。


但如果使用的是 Arthas,那么我们就可以直接通过反编译命令,将字节码编译为正常的 Java 代码,然后再确认是否为最新的代码即可。我们只需要执行 jad 命令即可,实现示例如下:


image.png


这样我们就可以直接来查看这个发布的程序是否为最新版本了。


不仅如此,我们还可以使用 Arthas 来监测整个程序的运行情况,如下图所示:


image.png


我们还可以用 Arthas 来查看一些 JVM 的相关信息,如下图所示:


image.png


更多 Arthas 的功能,请访问:https://alibaba.github.io/arthas/commands.html

相关文章
|
数据安全/隐私保护
基于SpringBoot+Vue+Java 的漫画之家系统(二)
基于SpringBoot+Vue+Java 的漫画之家系统
|
5月前
|
前端开发 JavaScript Java
计算机Java项目|基于Springboot的漫画网站
计算机Java项目|基于Springboot的漫画网站
|
5月前
|
安全 Java 定位技术
Java类加载大冒险,谁能将它变成漫画
Java类加载大冒险,谁能将它变成漫画
26 0
|
6月前
|
JavaScript Java 数据库
java漫画网站
漫画网站的角色分为管理员和用户。 管理员:管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、漫画分类管理、漫画投稿管理、分类管理、排行榜管理、交流论坛、系统管理等功能。 用户:用户使用本系统涉到的功能主要有:首页、个人中心、,漫画投稿管理等功能。
|
6月前
|
JavaScript Java 测试技术
基于Java的漫画阅读系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的漫画阅读系统的设计与实现(源码+lw+部署文档+讲解等)
87 2
|
数据安全/隐私保护 索引
基于SpringBoot+Vue+Java 的漫画之家系统(三)
基于SpringBoot+Vue+Java 的漫画之家系统
|
存储 Java 关系型数据库
基于SpringBoot+Vue+Java 的漫画之家系统(一)
基于SpringBoot+Vue+Java 的漫画之家系统
|
Java
推荐IntelliJ IDEA插件JRebel,支持Java项目热更新,省去不断重启服务的烦恼
推荐IntelliJ IDEA插件JRebel,支持Java项目热更新,省去不断重启服务的烦恼
722 0
推荐IntelliJ IDEA插件JRebel,支持Java项目热更新,省去不断重启服务的烦恼
|
安全 Java 程序员
漫画 | Java多线程与并发(二)
漫画 | Java多线程与并发(二)
153 0
漫画 | Java多线程与并发(二)
|
Java
漫画 | Java多线程与并发(一)
漫画 | Java多线程与并发(一)
145 0
漫画 | Java多线程与并发(一)