「Java」替换代码的情况下不停机!这操作可能工作6年的Java程序员都不会( 二 )
首先想用arthas调试项目 , 服务器必须要有运行着的Java服务 , demo-0.0.1-SNAPSHOT.jar就是我启动的测试项目 , 启动arthas后它会自动检测本地所有的Java服务列出来 , 我们只需按照序号输入想要调试的项目即可 , 选1进入对应进程的arthas交互平台
2、在线安装
执行上面的命令会在所在的文件中生成as.sh执行文件
启动arthas
3、远程连接:「要想使用arthas服务的 web console必须对外暴露本机ip」
访问arthas控制台也有两种方法
「(1)、web console 界面」
「重点说明」:--target-ip 的ip 一定要是arthas所在机器对外暴露的ip , 「但如果用的是阿里云机器必须要使用私有ip启动arthas服务 , 但访问必须是公网IP」
「(2)、telnet方式」
telnet 10.0.2.5 8563
访问 http://59.110.218.9:8563/, 进入交互平台
Arthas 命令使用1、Dashboard 命令查看当前系统的实时数据面板 , 例如:服务器thread信息、内存memory、GC回收等情况
2、Thread(线程监控)
「可以看到这个线程是被synchroned关键字锁导致的阻塞」 , 目前只支持找出synchronized关键字阻塞住的线程 ,如果是java.util.concurrent.Lock ,目前还不支持 。
「重点学习」:thread -b ##「找出当前阻塞其他线程的线程」
3、JVM (jvm实时运行状态 , 内存使用情况等)
4、trace (当前方法内部调用路径 , 路径上每个节点的耗时)$ trace #类名 #方法名
对于执行耗时相对较长的方法 , 调用链路耗时属性会高亮显示方便排查
参数 -j 可以过滤jdk的函数 trace -j
com.example.demo.controller index2 参数 #cost 可以按执行耗时毫秒ms过滤 trace -j
com.example.demo.controller index2 ’#cost >10‘
5、watch当前方法执行数据观测 , 能观察到的范围为:返回值、抛出异常、入参
throwExp:异常 params :入参(数组) , 单个参数params【0】 returnObj:返回值
6、stack当前方法被调用的路径 , 显示当前方法被那些方法调用
7、monitor 命令监控类、方法的调用进行监控 , 调用次数、成功次数、失败次数、平均响应时长、失败率等
8、classloader 命令将JVM中所有的类加载器统计出来 , 树状展示
线上代码热更新(动态修改上线项目代码)手动在代码中抛异常 , 「不停机不重新发包的情况下 , 修改线上代码」
启动服务也达到我们预期异常
「替换代码的流程:」
1、jad命令 将需要更改的文件先进行反编译 , 保存下来, 编译器修改
在这里插入图片描述
修改完以后需要将类重新加载到JVM
2、SC命令 查找当前类是哪个classLoader加载的
3、MC命令 用指定的classloader重新将类在内存中编译
推荐阅读
- 『程序员』装出新高度! 程序员用代码写招租广告只因不想与其它行业人士合租
- 程序员■Java程序员必知:HashMap进行put操作会不会引起死循
- 路飞写代码|浪潮也难以逃脱限制,自主自研迫在眉睫!美国科技霸凌背后的“获利”浪潮也被美国进行断供更大的风暴还在后面写在最后:,中兴、华为之
- 课工场郑州翔天信鸽|JavaScript最常用,java是主流,JetBrains公布编程语言排名
- 猿灯塔|POI Excel,Java架构-Apache
- 【Java】github上标星70.5k,贼火的Java突击手册,全面详细对标阿里P7
- 华为:获华为700亿元订单后,日企正“替换”美企:大规模供应5G零部件
- 『』公司新招架构师,同事让他写代码被怼:我不写代码的,结果愣住了!
- 「编程」后台编程语言互相争执,为何前端公认JavaScript?
- 腾讯@JAVA如何连接数据库
