Arthas

什么是Arthas?

  Arthas(阿尔萨斯)是阿里巴巴中间件开源的一款Java诊断工具,开始在淘宝内部孵化使用,后来成为阿里Java项目必须使用的内部工具。2018年arthas成为阿里开源项目,代码托管在GitHub上,star数高达23.3k,深受Java开发者的喜爱

  Arthas基于Greys进行二次开发,主要利用Java6开始提供的instrumentation特性,动态增强你所指定的类,获取你想要得到的信息,采用命令行交互模式,同时提供tab自动补全功能,无需重启;动态跟踪Java代码;实现监控jvm状态。

  原理:进程间通讯的方式,启动客户端attach到目标进程的虚拟机上,然后远程执行一些操作。很多方法都是通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,需要尽量明确需要观测的类、方法以及条件,诊断结束后要执行stop获或者将增强过的类执行reset命令。

为什么需要Arthas?
  当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
    这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
    我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
    遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
    线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
    是否有一个全局视角来查看系统的运行状况?
    有什么办法可以监控到JVM的实时运行状态?
    怎么快速定位应用的热点,生成火焰图?
  Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

优点:
  定位问题减少重新编译代码、重启服务
  动态监控Java进程
  0代码侵入
  灵活、可插拔

安装
  参考:https://arthas.aliyun.com/doc/install-detail.html
  1、jdk安装配置
  2、解压arthas-3.x.x-bin.zip即可使用
  3、java -jar arthas-boot.jar

卸载
  在 Linux/Unix/Mac 平台
  删除下面文件:
  rm -rf ~/.arthas/     
  rm -rf ~/logs/arthas
  Windows平台直接删除user home下面的.arthas和logs/arthas目录

启动
     java -jar arthas-boot.jar
  在命令行执行(使用与目标进程一致的用户启动,否则可能attach失败)

退出
     如果只是退出当前的连接,可以直接quit或者exit退出。attach到目标进程的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。如果想完全退出,请执行stop命令。

基础命令
  help——查看命令帮助信息
  cls——清空当前屏幕区域
  session——查看当前会话的信息
  reset——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
  version——输出当前目标 Java 进程所加载的 Arthas 版本号
  history——打印命令历史
  quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
  stop——关闭 Arthas 服务端,所有 Arthas 客户端全部退出
  keymap——Arthas快捷键列表及自定义快捷键

JVM相关命令
  dashboard--当前系统的实时数据面板
  thread--查看当前JVM线程堆栈信息
  jvm--查看当前jvm的信息
  sysprop--查看和修改JVM的系统属性
  sysenv--查看JVM的环境变量
  getstatic--查看类的静态属性
  ognl--查看ognl表达式
  mbean--查看MBean的信息
  vmoption--查看JVM参数

观测相关命令
  请注意,这些命令都是字节码增强技术实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此线上、预发使用时,需要尽量明确需要观测的类、方法以及条件,诊断结束后也要执行stop命令或者将增强过的类执行reset命令
  monitor--方法执行监控
  watch--方法执行数据观测
  trace--方法内部调用路径,并输出方法路径上的每个节点上耗时
  stack--输出当前方法被调用的调用路径
  tt--方法执行数据的时空隧道,记录下指定方法每次调用的入参、出参,并能对这些不同时间下的调用进行观测

GitHub地址:https://github.com/alibaba/arthas/wiki
用户手册:https://arthas.aliyun.com/doc/quick-start.html
思维导图:https://user-images.githubusercontent.com/1683936/71873638-a697b800-315a-11ea-9862-fbfa8e470064.png

原文地址:https://www.cnblogs.com/hzzjj/p/14792540.html