arthas 常用命令
创始人
2025-05-29 05:42:24
0

* dashboard:当前系统的实时数据面板

* thread:查看当前线程信息,查看线程的堆栈

thread 1 | grep 'main(' // thread 1会打印线程 ID 1 的栈,通常是 main 函数的线程

* jad:反编译指定已加载类的源码

jad 类名 // 反编译 Main Class

* trace:方法内部调用路径,并输出方法路径上的每个节点上耗时

trace 类名 方法名 '#cost > 10' -n 1  // 只会展示耗时大于 10ms 的调用路径

* watch:函数执行数据观测

// 观察事件点
// -b 函数调用前
// -e 函数异常后
// -s 函数返回后
// -f 函数结束后
// -x 指定输出结果的属性遍历深度,默认为 1,最大值是 4
// -n 1 指定输出次数// 查看方法参数、目标对象、返回值
watch 类名 方法名 "{params,target,returnObj}"// 查看方法第一个参数,假设 params[0] 是一个List对象
watch 类名 方法名 params[0] -n 1
// 查看数组中的元素
watch 类名 方法名 params[0][0] -n 1
// 查看Pojo的属性
watch 类名 方法名 params[0][0].age -n 1// 集合投影,相当于 java stream 中的 map 方法
watch 类名 方法名 params[0].{name} -n 1// 集合过滤,{? #this.age > 5} 相当于 java stream 中的 filter 方法
watch 类名 方法名 "params[0].{? #this.age > 5}.{name}" -n 1 // 所有age大于5的Pojo的name
watch 类名 方法名 "params[0].{^ #this.age > 5}.{name}" -n 1 // 第一个age大于5的Pojo的name
watch 类名 方法名 "params[0].{$ #this.age > 5}.{name}" -n 1 // 最后一个age大于5的Pojo的name// 多行表达式,把所有Pojo的name拿出来,再往里面新加一个新的元素,在返回新的列表
watch 类名 方法名 '(#test=params[0].{name}, #test.add("abc"), #test)' -n 1
// 调用构造函数,创建一个新的list,然后添加一个新的元素,然后返回添加后的list
watch 类名 方法名 '(#test=new java.util.ArrayList(), #test.add("abc"), #test)' -n 1// 访问静态变量
watch 类名 方法名 '@类名@静态变量名' -n 1
// 调用静态方法
watch 类名 方法名 '@类名@方法名(args)' -n 1
// 静态方法和非静态方法结合
watch 类名 方法名 '@类名@静态方法名().非静态方法名()' -n 1// 访问Map中的元素
watch 类名 方法名 '@类名@静态变量名.keys' -n 1 // 获取这个Map的所有key 
// key 为 enum 类型的获取方法
// 方式一:valueOf
watch 类名 方法名 '@类名@静态变量名.get(@枚举类名@valueOf("RUN"))' -n 1
// 方式二:迭代器+过滤
watch 类名 方法名 '@类名@静态变量名.entrySet().iterator.{? #this.key.name() == "RUN"}' -n 1

* jad + mc + redefine:一条龙实现线上热更新

  1. 反编译需要修改的文件

    jad --source-only 类名 > 目标路径/类名.java
    
  2. sc查找加载修改类的ClassLoader

    sc -d *类名 | grep classLoaderHash
    
  3. mc内存编译代码

    mc -c 1be6f5c3 类名.java -d 目标路径
    
  4. redefine热更新代码

    redefine 类名.class
    

* ognl 获取 Bean 并执行方法

ognl -x 3 '#springContext=@com.ithuameng.admin.utils.SpringUtils@applicationContext,#springContext.getBean("userServiceImpl").getUserByUsername("ithuameng")' -c 18b4aac2

* watch + ognl 返回多个 Bean 方法执行结果

watch -x 2 -n 1 com.ithuameng.admin.service.impl.UserServiceImpl listUser '#springContext=@com.ithuameng.admin.utils.SpringUtils@applicationContext,#user=#springContext.getBean("userServiceImpl"),#redis=#springContext.getBean("redisTemplate"),{#redis.opsForValue().get("pwy::token::1"),#user.getUserByUsername("ithuameng")}'

相关内容

热门资讯

不经意一瞥,广西一保洁大姐意外... 在南宁市江南区一处绿化带上,保洁大姐不经意的一瞥,竟发现了一株珍稀的无叶美冠兰。据悉,无叶美冠兰是腐...
避免与美国在防务上过度捆绑?泰... 国际在线综合报道:泰国空军3日通过社交媒体发布消息称,将从瑞典采购最新型萨博“鹰狮”(JAS-39E...
四川省第二届“法治之光法援故事... 5月29日,四川省首届法治之光法援故事影像展优秀作品现场展示暨四川省第二届“法治之光法援故事”影像征...
深蓝汽车隐私条例新增用户数据采... 6月4日上午消息,近日有网友称,在深蓝汽车被曝向车主们的车机投放广告并致歉后,深蓝汽车对用户隐私条例...
四川:出台法治督察与法律监督协... 近日,四川省检察院联合四川省司法厅出台《四川省法治督察与法律监督协作配合工作办法(试行)》(下称《工...
稳定币:一周28场电话会,香港... 【稳定币成券商关注焦点,香港《稳定币条例》推动市场新动向】“稳定币”近期成为券商分析师关注焦点。券商...
*ST京蓝收到立案告知书,律师... 雷达财经雷助吧出品 文|阑珊 编|深海 5月30日,*ST京蓝发布关于收到中国证券监督管理委员会立案...
全国首部保障农民工工资支付的地... 央广网呼和浩特6月4日消息(记者李春雪)日前,全国首部保障农民工工资支付的地方性法规《内蒙古自治区保...
深圳:在前海、河套等区域试点数... 人民财讯6月4日电,近日,深圳市商务局、市发展改革委联合印发《深圳市推动服务贸易和数字贸易高质量发展...