使用应用诊断利器 Arthas 定位 Java 线上问题
一、Arthas 安装运行
Arthas 官方提供了多种安装:
- 下载 arthas-boot.jar,然后运行 jar 包(推荐)
1 | # 下载arthas-boot.jar |
运行之后,选择对应的 java 应用进程编号,即可进入 Arthas 的命令行操作界面
- 使用 as.sh 一键安装启动
1 | # 运行一下命令会下载启动脚本文件 as.sh 到当前目录 |
- 下载全量安装包进行安装运行
点击下载最新版本的 jar 包,解压后,在文件夹里有 arthas-boot.jar,然后按照 1 中的方式运行
- 通过操作系统的软件包管理器(rpm/deb)安装
1 | # 安装deb |
二、Arthas 常用命令
命令 | 说明 |
---|---|
dashboard | 当前系统的实时数据面板 |
thread | 查看当前 JVM 的线程堆栈信息 |
trace | 方法内部调用路径,并输出方法路径上的每个节点上耗时 |
watch | 方法执行数据观测 |
stack | 输出当前方法被调用的调用路径 |
tt | 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 |
monitor | 方法执行监控 |
jvm | 查看当前 JVM 信息 |
vmoption | 查看,更新 JVM 诊断相关的参数 |
sc | 查看 JVM 已加载的类信息 |
sm | 查看已加载类的方法信息 |
jad | 反编译指定已加载类的源码 |
classloader | 查看 classloader 的继承树,urls,类加载信息 |
heapdump | 类似 jmap 命令的 heap dump 功能 |
三、Arthas 常用操作
3.1、dashboard 实时数据面板
使用 dashboard 命令进行全局监控
1 | [arthas@38]$ dashboard |
使用 dashboard 命令可以概览程序的 线程、内存、GC、运行环境信息。
3.2、thread 线程详情查看
使用 thread 命令查看当前线程信息,查看线程的堆栈
参数说明:
- id 根据指定的线程 id 查看线程详细信息
- [n:] 指定最忙的前 N 个线程并打印堆
- [b] 找出当前阻塞其他线程的线程
- [i] 指定 cpu 占比统计的采样间隔,单位为毫秒
- [–all] 显示所有匹配的线程
3.3、trace 方法内部调用情况跟踪
使用 trace 命令跟踪方法内部调用路径,并输出方法路径上的每个节点上耗时,能方便的帮助定位性能问题缺陷
参数说明:
- class-pattern 类名表达式匹配
- method-pattern 方法名表达式匹配
- condition-express 条件表达式
- [E] 开启正则表达式匹配,默认为通配符匹配
- [n:] 命令执行次数
- #cost 方法执行耗时
四、Arthas 插件
如果使用的是 idea 开发,在插件管理中心,搜索安装 arthas idea,即可使用
在项目中找到对应的代码,然后选择 Tools > Arthas Command,即可看到相关的操作选项
选择对应的选项,即可生成对应的命令行
附:
Arthas 开源地址:https://github.com/alibaba/arthas
Arthas 官方地址:https://arthas.aliyun.com/zh-cn/