快速上手Arthas

5d29eb6eedc74f37b90d202f9bbcf845.png

目录

基本概述

安装方式

基础指令

jvm相关指令

class/classloader相关指令

monitor/watch/trace相关指令

其他


基本概述

jconsole等工具都必须在服务端项目进程中配置相关的监控参数,然后工具通过远程连接到项目进程,获取相关的数据。这样就会带来一些不便,比如线上环境的网络是隔离的,本地的监控工具根本连不上线上环境。并且类似于Jprofiler这样的商业工具,是需要付费的。

那么有没有一款工具不需要远程连接,也不需要配置监控参数,同时也提供了丰富的性能监控数据呢?

阿里巴巴开源的性能分析神器Arthas应运而生。

Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

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

安装方式

如果速度较慢,可以尝试国内的码云Gitee下载。

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

Arthas只是一个java程序,所以可以直接用java -jar运行。

除了在命令行查看外,Arthas目前还支持 Web Console。在成功启动连接进程之后就已经自动启动,可以直接访问 http://127.0.0.1:8563/ 访问,页面上的操作模式和控制台完全一样。

基础指令

退出当前 Arthas客户端,其他 Arthas客户端不受影响:

  1. quit/exit

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

  1. stop/shutdown

查看命令帮助信息 :

  1. help

打印文件内容,和linux里的cat命令类似:

  1. cat

打印参数,和linux里的echo命令类似:

  1. echo

匹配查找,和linux里的gep命令类似:

  1. grep

复制标隹输入到标准输出和指定的文件,和linux里的tee命令类似 :

  1. tee

返回当前的工作目录,和linux命令类似 :

  1. pwd

清空当前屏幕区域 :

  1. cls

查看当前会话的信息 :

  1. session

重置增强类,将被 Arthas增强过的类全部还原, Arthas服务端关闭时会重置所有增强过的类:

  1. reset

输出当前目标Java进程所加载的 Arthas版本号:

  1. version

打印命令历史:

  1. history

Arthas快捷键列表及自定义快捷键:

  1. keymap

jvm相关指令

当前系统的实时数据面板:

  1. dashboard

查看当前JVM的线程堆栈信息:

  1. thread

查看当前JVM的信息:

  1. jvm

查看和修改JVM的系统属性:

  1. sysprop

查看JVM的环境变量:

  1. sysem

查看和修改JVM里诊断相关的option:

  1. vmoption

查看当前JVM的 Perf Counter信息:

  1. perfcounter

查看和修改logger :

  1. logger

查看类的静态属性:

  1. getstatic

执行ognl表达式:

  1. ognl

查看 Mbean的信息:

  1. mbean

类似jmap命令的 heap dump功能:

  1. heapdump dump java heap

class/classloader相关指令

sc 查看JVM已加载的类信息:
-d 输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的Classloader等详细信息。如果一个类被多个Classloader所加载,则会出现多次
-E 开启正则表达式匹配,默认为通配符匹配
-f 输出当前类的成员变量信息(需要配合参数-d一起使用)
-X 指定输出静态变量时属性的遍历深度,默认为0,即直接使用toString输出

sm 查看已加载类的方法信息
-d 展示每个方法的详细信息
-E 开启正则表达式匹配,默认为通配符匹配

反编译指定已加载类的源码

  1. jad

内存编译器,内存编译.java文件为.class文件

  1. mc

加载外部的.class文件, retransform到JVM里

  1. retransform

加载外部的.class文件,redefine到JVM里

  1. redefine

dump已加载类的byte code到特定目录

  1. dump

classloader 查看classloader的继承树,urts,类加载信息,使用classloader去getResource
-t 查看classloader的继承树
-l 按类加载实例查看统计信息
-c 用classloader对应的hashcode来查看对应的 Jar urls

monitor/watch/trace相关指令

monitor 方法执行监控,调用次数、执行时间、失败率
-c 统计周期,默认值为120秒

watch 方法执行观测,能观察到的范围为:返回值、抛出异常、入参,通过编写groovy表达式进行对应变量的查看
-b 在方法调用之前观察(默认关闭)
-e 在方法异常之后观察(默认关闭)
-s 在方法返回之后观察(默认关闭)
-f 在方法结束之后(正常返回和异常返回)观察(默认开启)
-x 指定输岀结果的属性遍历深度,默认为0

trace 方法内部调用路径,并输出方法路径上的每个节点上耗时
-n 执行次数限制

输出当前方法被调用的调用路径

  1. stack

方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

  1. tt

其他

列出所有job

  1. jobs

强制终止任务

  1. kill

将暂停的任务拉到前台执行

  1. fg

将暂停的任务放到后台执行

  1. bg

搜索满足条件的结果

  1. grep

将命令的结果去除ANSI颜色

  1. plaintext

按行统计输出结果

  1. wc

查看或设置Arthas全局开关

  1. options

使用async-profiler对应用采样,生成火焰图

  1. profiler

73afaa5b08f94422a3df6a7ae1bb9ed7.png

发表评论

表情:
评论列表 (有 0 条评论,97人围观)

还没有评论,来说两句吧...

相关阅读

    相关 快速上手Navicat~

    > 众所周知, Navicat是一款轻量级的用于MySQL连接和管理的工具,非常好用,使用起来方便快捷,简洁。下面我会简单的讲一下其安装以及使用的方法。并且会附带相关的永久安装

    相关 快速上手Navicat~

    > 众所周知, Navicat是一款轻量级的用于MySQL连接和管理的工具,非常好用,使用起来方便快捷,简洁。下面我会简单的讲一下其安装以及使用的方法。并且会附带相关的永久安装