Arthas用法

罗晓磊 · May 25, 2019

简介

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

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

安装

快速安装

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

aliyun的镜像

java -jar arthas-boot.jar --repo-mirror aliyun --use-http

gitee镜像

wget https://arthas.gitee.io/arthas-boot.jar

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

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

gitee镜像

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

全量安装

  1. 下载
  2. 解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动
java -jar arthas-boot.jar
  1. 打印帮助信息
java -jar arthas-boot.jar -h

手动安装

Linux
  1. 下载
  2. 解压缩arthas的压缩包
    unzip arthas-packaging-bin.zip
    
  3. 安装Arthas(注意,这里根据你需要诊断的Java进程的所属用户进行切换)
    sudo su admin
    rm -rf /home/admin/.arthas/lib/*
    cd arthas
    ./install-local.sh
    
  4. 启动Arthas
    ./as.sh
    
    Windows
  5. 下载
  6. 解压缩arthas的压缩包

基本用法

  1. 启用arthas
java -jar arthas-boot.jar
  1. 选择应用java进程
java -jar arthas-boot.jar
* [1]: 35542
  [2]: 71560 arthas-demo.jar
Demo进程是第2个,则输入2,再输入回车/enter
  1. 查看dashboard
dashboard
  1. 通过thread命令来获取到arthas-demo进程的Main Class
thread 1
  1. 通过jad来反编译Main Class
jad demo.MathGame
  1. 通过watch命令来查看demo.MathGame#primeFactors函数的返回值
watch demo.MathGame primeFactors returnObj
  1. 退出arthas
quit或者exit Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
shutdown 完全退出arthas

卸载

Linux

rm -rf ~/.arthas/
rm -rf ~/logs/arthas

Windows

直接删除user home下面的.arthas和logs/arthas目录

常用命令

  • sysprop 打印所有的System Properties信息
    • sysprop java.version
    • sysprop | grep user
    • sysprop testKey testValue
  • sysenv 命令可以获取到环境变量。和sysprop命令类似。
  • jvm 命令会打印出JVM的各种详细信息。
  • dashboard 命令可以查看当前系统的实时数据面板。输入 Q 或者 Ctrl+C 可以退出dashboard命令。
  • thread 查看所有线程信息
  • thread 16 查看线程ID 16的栈:
  • thread -n 3 查看CPU使用率top n线程的栈
  • thread -n 3 -i 5000 查看5秒内的CPU使用率top n线程栈
  • thread -b 查找线程是否有阻塞
  • java -jar arthas-boot.jar –target-ip 默认情况下,arthas yourip server侦听的是 127.0.0.1 这个IP,如果希望远程可以访问,可以使用–target-ip的参数。

参考链接

Twitter, Facebook