目录

1:写在前头

2:安装

3:常用命令详解

3.1:jvm 

3.2:trace (耗时)

3.3:watch(查看参数)

3.4:stack 

3.5:tt

4:总结


1:写在前头

还在为线上出现的问题而头大吗?

还在为线上没有打印日志回头加日志重新发布而苦恼吗?

还在为因为某些原因而工作效率低下而脑壳疼吗?

接下来介绍一款阿里开源的线上诊断利器--Arthas。经过本人测试确实牛皮的很,爱了 ,爱了。

 

2:安装

       目前只针对于macos或者centos环境,安装步骤

1:使用 wget https://alibaba.github.io/arthas/arthas-boot.jar 进行下载

2:使用java -jar 进行启动 jar      java -jar arthas-boot.jar

线上诊断利器之Arthas-几个重要的命令

3:选择前面的 1,2,3进行attach到对应的app中,像这里我的app是ArthasTestApplication,所以我选择3,然后回车

线上诊断利器之Arthas-几个重要的命令

这样就很简单的进入到了arthas连接对应app的界面了.

3:常用命令详解

3.1:jvm 

可以看到当前jvm里面的一些参数,包括重要的指标,GC的次数以及时间等等,不是本篇的重点

线上诊断利器之Arthas-几个重要的命令

3.2:trace (耗时)

语法:trace  全限定类名 方法名字  =======>  trace com.zcc.arthastest.TestController getUser 

可以查看在一次接口的接口的调用栈中,哪些接口耗时比较多,目前官方式用红颜色标识出来了。

线上诊断利器之Arthas-几个重要的命令

很明显在截图中,这个方法使用了3003.885282中耗时多,并且在#19行,发现代码这里出现了线程休眠,说明这里可以优化。

3.3:watch(查看参数)

 对于我们线上没有打入参啊,返回参数啊,抛出的异常啊,哪里排除的啊,然后一脸懵逼啊,心里一万个草拟吗啊,这下子不用慌了,几个简单的命令帮你轻松解决。

1:查看入参

watch -b 全限定类名 方法名字  params   =======>  watch -b com.zcc.arthastest.TestController getUser  params

线上诊断利器之Arthas-几个重要的命令

在截图中很明显的可以看到拦截到了输入的参数已经类型

2:查看出参

命令:watch 全限定类名 方法名字  "{params, returnObj, throwExp}"  ====== >

watch com.zcc.arthastest.TestController getUser "{params, returnObj, throwExp}"

线上诊断利器之Arthas-几个重要的命令

3:查看异常值

命令和查看出参的一样,下面就直接演示,当输入参数==1的时候,会抛出异常

watch 全限定类名 方法名字  "{params, returnObj, throwExp}"  ====== >

watch com.zcc.arthastest.TestController getUser "{params, returnObj, throwExp}"

线上诊断利器之Arthas-几个重要的命令

3.4:stack 

查看调用栈和java工具包自带的jstack的功能差不多,都是查看线程的调用栈的。

命令:stack 全限定类名  方法名 =======> stack com.zcc.arthastest.TestController getUser

线上诊断利器之Arthas-几个重要的命令

3.5:tt

tt -t com.zcc.arthastest.TestController getUser

还可以加上 -n 参数  

tt -t  -n 3 com.zcc.arthastest.TestController getUser 三次会退出,防止调用次数过多,不好查找

传说中的时空隧道,可以查看接口调用的记录,以及重放,这个真的是太猛了。

线上诊断利器之Arthas-几个重要的命令

接口回放:

1:先使用tt -l  看看列表

线上诊断利器之Arthas-几个重要的命令

2:选择一个index 来进行回放

命令: tt -i 1000 -p

回放 index = 1000的

线上诊断利器之Arthas-几个重要的命令

回放 index = 1010的

线上诊断利器之Arthas-几个重要的命令

 

4:总结

到此为止Arthas的简单介绍就到这里了,补充下,现在很多的公司基本上是用docker或者是基于docker部署的,其实Arthas也就是一个jar而已,完全放在dockerFIle中去一起构建成一个容器,要不然每发布一次就要重新下载一次,这个就很尴尬了,这个jar也不大,成本也不算很高吧。只要在DockerFile中添加一行代码即可 --- 鲁迅告诉你大树好乘凉,但是没有告诉你怎么找到这棵大树。以上中有不好的地方还请指导交流。

4:附件

      本章测试代码地址:https://gitee.com/htmonitor/arthas.git

相关文章: