Arthas(阿尔萨斯)能干什么

Arthas 是Alibaba开源的Java诊断工具,它能帮你解决以下问题:

  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  • 是否有一个全局视角来查看系统的运行状况?
  • 有什么办法可以监控到JVM的实时运行状态?

下载与安装

Linux安装

下载arthas-boot(推荐)

下载arthas-boot.jar,然后用java -jar的方式启动:

    wget https://alibaba.github.io/arthas/arthas-boot.jar
    java -jar arthas-boot.jar

打印帮助信息:

    java -jar arthas-boot.jar -h
  • 如果下载速度比较慢,可以使用aliyun的镜像:java -jar arthas-boot.jar --repo-mirror aliyun --use-http
下载as.sh

Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 回车 执行即可:

    curl -L https://alibaba.github.io/arthas/install.sh | sh

上述命令会下载启动脚本文件 as.sh 到当前目录,你可以放在任何地方或将其加入到 $PATH 中。

直接在shell下面执行./as.sh,就会进入交互界面。

也可以执行./as.sh -h来获取更多参数信息。

下载离线版本

Arthas最新版本为3.1.1,点我下载,得到离线包arthas-packaging-3.1.1-bin.zip

上传到服务器,解压到arthas目录

    unzip arthas-packaging-3.1.1-bin.zip -d arthas

安装启动

    cd arthas
    sh install-local.sh
    ./as.sh

或运行jar启动

   java -jar arthas-boot.jar

Widows安装

离线包arthas-packaging-3.1.1-bin.zip,解压后在根目录有 as.bat。此脚本暂时只接受一个参数 pid,即只能诊断本机上的 Java 进程,java进程pid可使用jps命令查看,启动命令如下:

    as.bat <pid>

或使用jar启动

    java -jar arthas-boot.jar

启动与退出

普通启动

    java -jar arthas-boot.jar

启动时指定对外开放ip,允许远程连接,客户端可以通过该ip连接服务器上的arthas,默认端口为3658

    java -jar arthas-boot.jar --target-ip 192.168.132.132

上述命令其实是启动了arthas服务端,同时启动了一个客户端连接到该服务端

启动后会将java进程列出来

    rkyao@ubuntu:/usr/local/arthas$ java -jar arthas-boot.jar 
    [INFO] arthas-boot version: 3.1.0
    [INFO] Found existing java process, please choose one and hit RETURN.
    * [1]: 4873 arthas-test.jar
      [2]: 5196 arthas-spring-test-0.0.1-SNAPSHOT.jar

假如想要监控第一个进程,则输入1,再输入回车/enter。Arthas会attach到目标进程上,并输出日志:

    [INFO] arthas home: /home/rkyao/.arthas/lib/3.1.0/arthas
    [INFO] Try to attach process 4873
    [INFO] Attach process 4873 success.
    [INFO] arthas-client connect 127.0.0.1 3658
      ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.                           
     /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'                          
    |  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.                          
    |  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |                         
    `--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'                          
                                                                                    
    
    wiki: https://alibaba.github.io/arthas
    version: 3.1.0
    pid: 4873
    time: 2019-04-25 23:51:54
    
    $

然后就可以输入命令进行各种操作,如查看dashboard,则输入dashboard并按回车即可

    $ dashboard

中断当前在执行的命令,ctrl + c即可

退出当前 Arthas 客户端(服务端没有关闭,仍在后台运行并且还attach在之前指定的进程上)

    quit

关闭服务端,所有 Arthas 客户端全部退出

    shutdown

客户端远程连接

远端服务器上已经启动了一个arthas服务,我们想连接这个服务,可以有两种方式,arthas服务的信息如下:

    ip:192.168.132.132
Web console

Web consolearthas自带的管理界面,浏览器访问 http://192.168.132.132:8563/ 即可打开,界面里IP和Port输入框中填入对应信息即可连接。
在这里插入图片描述

arthas-client

arthas提供了一个名为arthas-client.jar的客户端jar包,可使用该jar连接服务端,使用如下命令:

    java -jar arthas-client.jar 192.168.132.132 3658
cmd命令行

直接使用windows命令行,先按win+R再输入cmd打开命令行,然后输入如下命令:

    telnet 192.168.132.132 3658

常用命令

首先准备一段代码用于演示命令,类全路径:com.rkyao.arthas.controller.ArthasController,方法名:testControllerMethod
在这里插入图片描述

dashboard命令显示当前系统的实时数据面板,如CPU占比, 错误数, 线程池信息等

在这里插入图片描述

watch命令观察接口参数和返回值
    watch com.rkyao.arthas.controller.ArthasController testControllerMethod "{params,returnObj}" -x 2

在这里插入图片描述

debug命令重放请求

首先执行如下命令,监控请求方法

    tt -t com.rkyao.arthas.controller.ArthasController testControllerMethod

然后调用该请求,可以看到捕获到的请求信息
在这里插入图片描述
找到请求对应的index,本例中为1000,然后执行命令重放请求

    tt --play -i 1000
jad命令查看反编绎的源代码(指定类)
	jad com.rkyao.arthas.controller.ArthasController

在这里插入图片描述

jad命令查看反编绎的源代码(指定类的方法)
	jad com.rkyao.arthas.controller.ArthasController testControllerMethod

在这里插入图片描述

trace命令渲染和统计整个调用链路上的所有性能开销和追踪调用链路,很方便的定位性能瓶颈
    trace com.rkyao.arthas.controller.ArthasController testControllerMethod

在这里插入图片描述

相关链接

GitHub地址: https://github.com/alibaba/arthas
Arthas用户文档:https://alibaba.github.io/arthas/
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐