JAVA线上排查问题的利器--Arthas

 

Java诊断工具Arthas

1. Arthas简介

Arthas是阿里开源的一个线上java诊断工具,发现阿里还是挺喜欢开源一些技术的,造福人类。昨天试用了一下,发现真是强大,解决了我工作两年的很多困扰,有点相见恨晚的感觉。

根据官网的说明,它能解决下面的问题:

 

这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

是否有一个全局视角来查看系统的运行状况?

有什么办法可以监控到JVM的实时运行状态?

Arthas采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

2. Arthas安装

Linux下直接执行curl -L https://alibaba.github.io/arthas/install.sh | sh,然后执行./as.sh就可以进入到Arthas的命令行界面。

3. Arthas试用

安装完后试用了它的监控相关的功能,以后调试就不那么麻烦了。

Arthas的大多命令格式

命令+[参数]+类路径+方法名+[参数]

[参数]根据具体命令可有可无

下面说一下我常用的基本命令:

  • help 查看命令帮助,eg:help getstatic
  • cls 清屏
  • quit 退出当前Arthas客户端
  • shutdown 退出所有打开的Arthas客户端

下面说一下我常用的基本参数:

  • -n 限制打印的条数,如程序执行中,可能有些方法会疯狂打印。
  • -i 设置打印间隔时间,单位毫秒
  • -x 属性遍历深度,默认为1

常用表达式:

  • * 任意多个任意字符
  • #cost 消耗的时间

进入命令行界面,刚进入的时候会显示所有的java进程,选择对应的数字然后回车就可以进入到对应的进程中

3.1 jad命令

3.2 watch命令

watch可以监控某个方法的出入参,异常信息等。

# -x表示遍历深度,可以调整来打印具体的参数和结果内容,默认值是1。

  -b表示在方法调用之前观察 -s表示方法调用之后观察 -n 表示观察次数

3.3 trace命令

trace可以输出方法内部调用关系,并打印方法内部每个调用的耗时。

# 打印setOrganizeAuth方法内每个调用的耗时

3.4 stack命令

stack可以输出方法的整个调用路径。

# 打印save方法的整个调用路径(不抛出堆栈也能看到调用链啦!)

 

 

 

3.5 tt命令

记录方法每次的调用出入参和异常信息,并且完整保留调用现场,可以再次模拟调用。

# 记录每次调用queryCatalog的情况,可以根据其他命令打印出入餐和复现现场

参考博客:http://www.pianshen.com/article/713480172/

官方文档地址:https://alibaba.github.io/arthas/advanced-use.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值