一、前言

1、热更新代码的场景

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

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

二、使用阿里巴巴开源的Java诊断工具

---Arthas,他可以附着在我们的Java服务器进程上面,查看服务器状态,jvm状态等各种参数指标,还可以进行热更新

1、下载启动Arthas

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

java -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

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

redefine

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

arthas 查看哪个方法调用最耗时_Java开源诊断工具Arthas使用方法详解相关推荐

  1. Java开源诊断工具 Arthas 发布v3.1.0

    Arthas Arthas 自2018年9月份上线以来「传送门」,已收获近万个star,感谢开发者们的认可.此次Arthas 3.1.0版本的发布,不仅带来大家投票出来的新LOGO,还带来强大的新功能 ...

  2. Java诊断工具-Arthas入门与实践

    Java诊断工具-Arthas入门与实践 目录 Java诊断工具-Arthas入门与实践 什么是Arthas? Arthas能做什么? 我在哪里可以下载Arthas? 快速入门 1. 下载并运行mat ...

  3. 如何使用监控诊断工具Arthas(阿尔萨斯)

    Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load.内存.gc.线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参.异常,监测方法执行耗时 ...

  4. 阿里Java诊断工具 arthas - 生产环境反编译动态修改程序调试应用

    阿里Java诊断工具 arthas - 生产环境反编译动态修改程序调试应用 一.arthas 上篇文章我们借助arthas监测线上系统的运行信息.排查程序运行缓慢问题,尽管这样已经非常好了,但是还是会 ...

  5. Java-JVM诊断工具Arthas

    Java-JVM诊断工具Arthas https://arthas.aliyun.com/doc/ 官网 介绍 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似 ...

  6. 阿里开源的Java诊断工具——Arthas

    文章目录 1 问题背景 2 前言 3 Arthas有什么作用 4 入门小实践 5 SpringBoot应用.Arthas.Arthas Tunnel Server之间的关系 1 问题背景 线上生产环境 ...

  7. arthas 查看哪个方法调用最耗时_火眼金睛,Java诊断利器Arthas

    1 简介 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 ...

  8. arthas 查看哪个方法调用最耗时_阿里巴巴问题排查神器Arthas使用实践

    Apache Dubbo是Alibaba开源的高性能RPC框架,在国内有非常多的用户. Github:https://github.com/apache/incubator-dubbo 文档:http ...

  9. arthas 查看哪个方法调用最耗时_Arthas实战

    1.是什么?解决什么样的问题? Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决: 这个类从哪个 jar ...

最新文章

  1. 【数据库】MySQL的C语言接口学习
  2. 27个人类基因被重新命名,只因Excel总把它们自动纠正成日期
  3. iOS开发-观察者模式
  4. 不想当管理者、甚至连项目经理都也不想当,只想静心写写代码、不做管理
  5. mysql安装教程8.0.21安装_mysql8.0.21安装教程图文详解
  6. CLR via C# 3 读书笔记(4):第1章 CLR执行模型 — 1.4 执行程序集代码
  7. Android Studio - 如何更改Android SDK路径
  8. parted如何将磁盘所有空间格式化_linux文件系统及磁盘格式化
  9. Linux企业级项目实践之网络爬虫(27)——多路IO复用
  10. 队列与栈(Queue,Deque,Stack)
  11. 帝国CMS友情链接系统图文教程
  12. 平面设计需要学习哪些内容?
  13. php 抽签,javascript随机抽签程序
  14. matlab 每日学习 fft2 ifft2函数
  15. 深度剖析:针对深度学习的GPU共享
  16. hse是什么意思的缩写_什么是HSE
  17. UVA - 1389 Hard Life【分数规划+最小割】【最大权闭合图】
  18. 小提琴机器人拉法_小提琴的弓怎么拉 有什么技巧
  19. 特种浓缩分离:无机陶瓷膜设备性能描述
  20. 信用社计算机专业大纲,信用社计算机专业试题

热门文章

  1. mysql内部损坏_mysql表损坏故障案例
  2. ps一点等于多少厘米_企业展厅设计关于展台你了解多少?
  3. 变压器符号_行输出变压器的结构、符号及电路分析
  4. 工业交换机那么贵,为什么那么多人都在用?
  5. 【渝粤题库】陕西师范大学152208 公共危机管理
  6. 【渝粤题库】国家开放大学2021春1335幼儿园课程与活动设计题目
  7. java字节码提取if语句_终于找到了!有了它你就可以读懂字节码了!
  8. 不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
  9. 朴实!简单!依你所好,MySQL排序查询ORDER BY
  10. 服务器系统授权,授权方案说明