目录
【需求驱动】
所有的学习从需求开始,学习任何知识要想事半功倍,一定要先搞清楚它存在的意义和价值。
1、问题
案发现场:前两天刚上线了一个新功能,由于业务相对复杂,提供的是全自动的功能,对于客户来说都是接口直接操作,一个指令来了,就要执行一系列的操作,最终给客户一个处理结果,由于流程过多,中间状态多达十几个,所以虽然测试也跑通了一个正常流程,可是上线以后,还是有很多bug。导致的结果就是刚上线就频繁的替换文件,增量发布,需要不停的重启线上服务。而在公司呢,绝大部分的开发是没有生产服务器权限的,这就导致我们不要频繁的去找有权限的领导替换文件、重启服务。 好在这是一个独立的服务,重启也不影响其他核心业务。但是这样总归是不妥的,因为有些时候服务根本就不能重启,很多业务还是跑数据呢?于是就想,如果可以热部署就好了,一查就找到了这个非常优秀的工具 Arthas[为了解决线上热部署的问题]
2、是什么
Arthas是阿里巴巴开源的一款Java诊断工具,几乎可以取代很多JDK自带的诊断工具,如:jconsole 、jvisualvm,深受开发者的喜爱。
需要注意的是:Arthas
支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab
自动补全功能,进一步方便进行问题的定位和诊断。
3、为什么要学
3.1、支持线上反编译
其一:比如某个功能本地、测试环境都好好的,上线了突然不好用了,这个时候就很郁闷,是不是版本搞错了,或者没有commit
其二:通过动态代理生成的class,这部分代码在本地是没有的
3.2、支持热部署
线上遇到了bug,无法线上debug,难道只能通过加日志增量发版重启服务来排查吗
只有线上才有的bug,测试无法复现的bug,服务不能停。
3.3、可视化监控系统运行情况、JVM的实时运行情况
3.4、快速定位热点问题,生成火焰图
4、怎么用
4.1、安装
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
如下图,我把jar文件下载到了/usr/local/目录下
4.2、启动
如下图,启动后会显示当前java进程,输入一个前面的进程编号【1】,就可以监控程序了
4.3、常用命令
jad 反编译文件
redefine 热部署
dashboard 查看资源使用情况
jvm 查看虚拟机详情
下图