最近有不少小伙伴私信小编,问小编能不能讲一个Java开发中常用的诊断工具。你们知道,小编是很宠大家的。所以,今天就带大家来学习一下我们在日常工作中常用的诊断工具,Arthas(阿尔萨斯)。
一.现有问题
在我们的日常开发中,如果在代码中遇到问题,我们可以使用DEBUG进行调试,追踪方法的执行过程,查看参数及返回值和报错信息等,并可以进行定位和解决问题。
但如果是在服务器上,或者是在进行前后端联调、预发及线上,没有IDE的环境,我们遇到了问题,又如何排查定位问题呢?
有的小伙伴会说,我们可以查看线上的项目日志!但如果是数据有问题呢?日志文件中也不可能全部都有记录。
另外如果某个接口执行过慢,该如何定位是哪个服务?哪个方法?那行代码的问题?处于整个请求链中哪一环?
有的小伙伴会说,可以在每个方法中都添加AOP切面,使用StopWatch来记录时间。但这就需要修改代码了,不方便!
有时代码明明修改了,但运行的结果却还是旧的,代码修复后似乎没有生效怎么办?
我们查看线上的仓库代码,发现代码确实是新的,但执行的似乎是旧的代码?如何确定运行的代码不一致?
或者现在线上出现了紧急问题,但又不能或没有权限立即上线更新,这该如何立即处理?
虽然Python、PHP等脚本语言可以直接修改线上代码,但Java如何做到热更新呢?
以上这些问题,想想都很头疼,如果你不知道该怎么解决,到了公司里面真的很难混的下去哦。
所以针对上面的问题,小编要给大家介绍一款解决这些问题的利器--Arthas!那么Arthas具体能做什么呢?
二.Arthas概述
Arthas是Alibaba开源的Java诊断工具,也是目前最火的诊断工具之一。当我们遇到以下类似问题而束手无策时,Arthas都可以帮我们解决:
这个类是从哪个 jar包加载的?为什么会产生与各种类相关的 Exception?
我修改的代码为什么没有执行?难道是我没 commit?分支搞错了?
遇到问题无法在线上debug,难道只能通过加日志查看再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
怎么快速定位应用的热点,生成火焰图?
怎样直接从JVM内查找某个类的实例?
Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供了丰富的 Tab 自动补全功能,方便进行问题的定位和诊断。
总之一句话:简单,好用,用俺们河南话就是得劲,真中!
三.Arthas能做什么