Arthas 介绍

简介

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

常用命令介绍

停止 arthas 服务端

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

arthas 全局配置

名称 默认值 描述
json-format false 是否支持 json 化的输出
save-result false 是否打开执行结果存日志功能,打开之后所有命令的运行结果都将保存到~/logs/arthas-cache/result.log

options json-format 获取指定 option 的值
options save-result true 设置 option 的值

搜索命令

查询类

sc java.lang.Math -d | grep Loader 查找当前 class 被那个classsLoader 加载, 以及 hash 值

ongl 表达式

OGNL 表达式官网
arthas 特殊用法

docker 快速使用

1
2
3
4
5
6
7
8
mkdir /arthas
cd /arthas
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
# 资源清理
rm -rf /arthas
rm -rf ~/.arthas/
rm -rf ~/logs/arthas

获取实例对象方式

使用 vmtool 获取 bean 对象

1
2
3
4
5
vmtool -x 1 \
--action getInstances \
--classLoaderClass 'java.net.URLClassLoader' \
--className org.springframework.context.ApplicationContext \
--express 'instances[0].getBean("orderHeaderMapper")'

使用 ognl 表达式获取 bean 对象

1
2
3
ognl -x 2 \
-classLoaderClass 'org.springframework.boot.loader.LaunchedURLClassLoader' \
'#context=@packageName.ApplicationContextHelper@context,#beanObj=#context.getBean("orderHeaderMapper"),{#beanObj}'

使用 ognl 表达式获取 bean 对象(遍历单例缓存)

1
2
3
ognl -x 2 \
-classLoaderClass 'org.springframework.boot.loader.LaunchedURLClassLoader' \
'#beanList=@packageName.ApplicationContextHelper@context.beanFactory.singletonObjects.entrySet().iterator.{? #this.key =="orderHeaderMapper"},{#beanList[0].value}'

使用静态方法

getstatic packageName.ApplicationContextHelper context '#beanList=beanFactory.singletonObjects.entrySet().iterator.{? #this.key =="orderHeaderMapper"},{#beanList[0].value}'

idea 插件

Arthas-idea(部分命令可视化)

链接

arthas