Arthas是阿里开源的在线jvm诊断分析工具, 采用了命令行交互的方式进行jvm管理分析, 引用官方文档来说, 它能带给你解决以下几个问题:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
GitHub地址: https://github.com/alibaba/arthas
官方文档地址: https://alibaba.github.io/arthas/install-detail.html
本文内容参考的官方文档作为学习资料, 一步一步实验而成, 所以你也可以直接查看官方文档
安装
安装方式有两种
方式一:
下载jar, 运行jar:
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
方式二
此方法针对linux/mac等系统, 可以一键安装使用:
curl -L https://alibaba.github.io/arthas/install.sh | sh
此命令下载了一个shell脚本: as.sh
, 直接运行此脚本即可使用! 本文使用了这种方式. 运行as.sh
脚本之后, 如下图所示:
当我选择了第3个进程之后:
image.png快速开始
仪表盘(dashboard)
展示某JVM的仪表盘(即各种指标数据), 使用命令dashboard
, 接上图, 如果我要查看进程3
即进程号为57732的jvm进程的仪表盘, 直接在上面的命令行中输入:
dashboard
效果如下图:
image.png可以看到线程信息
, 内存
, GC次数和耗时
, 系统负载
, cpu核心数
, java版本
等.
dashboard
命令运行之后, 会每隔一小段时间刷新一次, 所以想停止此命令, 请control + c
thead
命令thread
可以打印所有的线程:
输入命令后, 可以看到上图的内容, 列出了N多个线程, 线程的信息包括线程id
, 线程名
等等, 如果要查看某个线程, 也很简单, 只要使用thread + ID
即可, 例如我要看上图中的ID为72的线程:
# thread + ID
thread 72
image.png
你也可以使用管道
对命令进行过滤筛选:
# 利用管道进行线程的查找, 和linux命令风格一致
thread | grep dubbo
反编译
运行中的应用, 如果怀疑版本更新的时候, 代码没有更新上去, 这时候经常会反编译一下代码, 查看是否是最新的代码, Arthas也提供了这样的功能, 命令为jad + 类名
, 例如我要反编译springboot应用的main方法:
# 反编译测试应用的main方法
jad com.sharer.user.SharerApplication
如下图:
image.pngwatch
通过watch
命令查看函数的返回值, 具体的方式为: watch
+ 类名
+ 方法名
+ returnObj
:
# 通过watch, 查看函数的额返回值
watch com.sharer.user.redisson getAddress returnObj
退出arthas
使用命令quite
或 exit
可以退出arthas, 但是实际arthas会继续运行, 使用shutdown
才可以完全退出
网友评论