快速上手Arthas

举报
yd_249383650 发表于 2023/05/23 09:51:04 2023/05/23
【摘要】 ​ 基本概述jconsole等工具都必须在服务端项目进程中配置相关的监控参数,然后工具通过远程连接到项目进程,获取相关的数据。这样就会带来一些不便,比如线上环境的网络是隔离的,本地的监控工具根本连不上线上环境。并且类似于Jprofiler这样的商业工具,是需要付费的。那么有没有一款工具不需要远程连接,也不需要配置监控参数,同时也提供了丰富的性能监控数据呢?阿里巴巴开源的性能分析神器Artha...

 基本概述

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下载。

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

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

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

基础指令

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

quit/exit

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

stop/shutdown

 查看命令帮助信息 :

help

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

cat

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

echo 

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

grep 

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

tee 

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

pwd 

清空当前屏幕区域 :

cls 

 查看当前会话的信息 :

session

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

reset 

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

version 

打印命令历史:

history 

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

keymap 

jvm相关指令

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

dashboard

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

thread 

查看当前JVM的信息:

jvm

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

sysprop 

查看JVM的环境变量:

sysem 

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

vmoption 

查看当前JVM的 Perf Counter信息:

perfcounter 

查看和修改logger :

logger 

查看类的静态属性: 

getstatic 

执行ognl表达式: 

ognl 

 查看 Mbean的信息: 

mbean

类似jmap命令的 heap dump功能: 

heapdump dump java heap

class/classloader相关指令

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

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

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

jad

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

mc 

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

retransform 

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

redefine

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

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 执行次数限制

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

stack

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

tt

 其他

列出所有job

jobs

强制终止任务

kill

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

fg

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

bg 

搜索满足条件的结果

grep 

将命令的结果去除ANSI颜色

plaintext 

按行统计输出结果

wc 

查看或设置Arthas全局开关

options 

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

profiler 

编辑


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。