当前位置: 首页 > 科技观察

推荐一款阿里开源的Java诊断工具,太好用了!

时间:2023-03-17 21:11:24 科技观察

阿尔萨斯是什么鬼?Arthas是阿里巴巴开源的Java在线诊断工具。非常强大,可以解决很多网上不方便解决的问题。Arthas诊断采用命令行交互方式,支持JDK6+、Linux、Mac、Windows操作系统,命令也支持使用tab键自动补全各种信息,非常方便诊断。这是它的官网:https://alibaba.github.io/art...Github地址:https://github.com/alibaba/ar...Arthas能解决什么问题?我们来看看Arthas官方的解释。当你遇到以下类似问题而束手无策时,Arthas可以帮你解决:1、这个类是从哪个jar包加载的?为什么会报各种类型的相关Exception?2、为什么我改的代码没有执行?难道是我没犯?分支错了?3、遇到问题不能在线调试,只能加日志重新发布吗?4、某用户线上数据处理有问题,但线上无法调试,线下无法重现!5.是否有全局视角来查看系统的健康状况?6、有什么方法可以监控JVM的实时运行状态?看完是不是觉得太牛逼了?特别是可以在线反编译类,可以在线调试跟踪问题代码,无需添加日志。既然这么牛逼,肯定有很多公司在用。官方登录时序图如下。快装官方推荐使用arthas-boot进行安装,非常方便。下面是基于Linux系统环境的演示。一般网上的问题也是基于linux环境的。第一步:下载在任意目录下下载arthas-boot包。wgethttps://alibaba.github.io/art...[root@VM_0_7_centos~]#wgethttps://alibaba.github.io/arthas/arthas-boot.jar--2019-07-3014:48:31--https://alibaba.github.io/arthas/arthas-boot.jarResolvingalibaba.github.io(alibaba.github.io)...185.199.108.153,185.199.109.153,185.199.110.153,...连接阿里巴巴。github.io(alibaba.github.io)|185.199.108.153|:443...connected.HTTPrequestsent,awaitingresponse...200OKLength:98637(96K)[application/java-archive]Savingto:'arthas-boot.jar'100%[============================================================================================================>]98,63732.8KB/sin2.9s2019-07-3014:48:36(32.8KB/s)-'arthas-boot.jar'已保存[98637/98637]第二步:使用java-jar命令执行arthas-boot包。java-jararthas-boot.jar[INFO]arthas-bootversion:3.1.1[INFO]找到已经存在的java进程,请选择一个并点击RETURN.*[1]:13062spring-boot-best-practice-0.0.1-SNAPSHOT.jar第三步:选择进程运行arthas-boot后,控制台会显示所有Java进程,选择一个你需要诊断的进程。如第二步所示,这里只有一个Java进程,输入序号1,回车,Arthas会attach到目标进程,并输出日志:[INFO]Startdownloadarthasfromremoteserver:https://maven.aliyun。com/repository/public/com/taobao/arthas/arthas-packaging/3.1.1/arthas-packaging-3.1.1-bin.zip[INFO]下载arthassuccess.[INFO]arthashome:/root/.arthas/lib/3.1.1/arthas[INFO]Trytoattachprocess13062[INFO]Attachprocess13062success.[INFO]arthas-clientconnect127.0.0.13658,---.,------.,------.,--.,--.,---.,---./O\|.--.''--..--'|'--'|/O\'.-'|.-.||'--'.'|||.--.||.-.|`.`-.|||||\\||||||||||.-'|`--'`--'`--''--'`--'`--'`--'`--'`--'`-----'wikihttps://alibaba.github.io/arthastutorialshttps://alibaba.github.io/arthas/arthas-tutorialsversion3.1.1pid13062time2019-07-3014:49:34至此安装启动完成。更多其他安装方法见:https://alibaba.github.io/art...实际开始使用后,当前光标会进入arthas控制台接受各种操作命令。接下来stackmanager会演示几个常用的命令,让大家对其有一个基本的了解,并具备快速上手的能力。1、仪表盘显示当前系统的实时数据面板,按ctrl+c退出。$dashboard2,thread查看当前JVM的线程栈信息。threadid,显示指定线程的运行栈:$thread20显示当前最忙的前N个线程并打印栈:$thread-n33,sc查看JVM加载类的详细信息。$sc-d*Test4,sm查看加载类的方法信息。$sm-dcn.javastack.springbootbestpractice.SpringBootBestPracticeApplicationmain5,jad反编译指定加载类的源码。$jadcn.javastack.springbootbestpractice.SpringBootBestPracticeApplication6,trace显示方法内部调用路径,非实时返回的命令并输出方法路径上的总耗时,以及每个节点上的详细耗时。$trace-jcn.javastack.springbootbestpractice.web.JsonTestgetUserInfo-j:表示跳过JDK中的方法路径。7、monitor定时监听某个方法的调用。$monitorcn.javastack.springbootbestpractice.web.JsonTestgetUserInfo-c5-c5:表示每5秒统计一次,统计周期,默认值为120秒。监控维度描述:监控项描述timestamptimestamp类名method方法名总调用次数successsuccessnumberfailfailurenumberrtaverageresponsetimefail-ratefailurerate8.watch观察方法执行数据可以方便的观察指定方法的调用情况,如:返回值,抛异常,入参等$watchcn.javastack.springbootbestpractice.web.JsonTestgetUserInfo'{params,returnObj}'-x2-b上面监控一个方法的入参,在方法执行前监控:-b,遍历深度:-x2.9,quit/exit退出当前的Arthas。该命令只会退出当前连接的客户端,目标进程所依附的Arthas会继续运行,端口不会关闭,下次连接时可以直接使用。10.shutdown关闭Arthas服务器并退出所有的Arthas客户端。以上演示了10个命令的基本使用,各种命令的使用详情可以在命令行--help中查看。更多其他命令请参考:https://alibaba.github.io/art...综上所述,使用Arthas可以轻松诊断一个Java应用,如:系统数据面板、JVM实时运行状态、类加载状态,监控方法执行,显示方法执行路径等Arthas的这些实用功能确实可以帮助我们解决一些常见的线上问题,也可以独立于应用代码,但仅限于一个JVM进程。如果是分布式系统,Arthas有点吃力。好了,今天的文章就这些了,你也在用Arthas吗?欢迎留言分享您的经验。如果您觉得文章不错,也可以分享给您的同学和同事。关注微信公众号:Java技术栈,后台回复“工具”即可获取栈长分享的过往工具列表。后面有好的Java开发工具,栈长会第一时间分享到公众号上。