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