Arthas--ognl表达式

news/2025/2/16 6:54:53/

背景

arthas执行ognl表达式,获取对应的jvm对象数据。ognl学习,可以查看上篇:https://xiaopanjia.blog.csdn.net/article/details/130425414

基本语法

ognl express -c {hashCode} --classLoaderClass {当前的全路径 ClassLoader 信息} -x {number}

参数说明

参数名称参数说明
express执行的表达式
[c:]执行表达式的 ClassLoader 的 hashcode,默认值是 SystemClassLoader
[classLoaderClass:]指定执行表达式的 ClassLoader 的 class name
[x]结果对象的展开层次,默认值 1

例如:

1、调用静态方法, 简单入参 返回普通对象

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18)' -X 1

2、方法A的返回值当做方法B的入参, 执行多行表达式,赋值给临时变量,返回一个List

ognl '#value1=@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18),
#value2=@com.shirc.arthasexample.ognl.OgnlTest@setPerson(#value1),{#value1,#value2}' -x 2

3、方法入参是简单类型列表

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getChilds({"test1","test2"})' -x 2

4、方法入参是一个复杂对象

ognl '#obj=new com.shirc.arthasexample.ognl.Shirc("test1",'test2'),
@com.shirc.arthasexample.ognl.OgnlTest@inputObj(#obj)' -x 2

5、方法入参是一个Map对象

ognl '#inputmap=#{ "foo" : "foo value", "bar" : "bar value" }, 
@com.shirc.arthasexample.ognl.OgnlTest@getMap(#inputmap)' -x 2

6、
#变量引用
引用变量的方法是在变量名之前加上
#this 当前对象
OGNL在计算表达式的过程中, 随时会将当前对象保存在 "this"变量中, 这个变量也可以象其他任何变量一样引用,用 #this 表示当前对象

例如:
shirc: 是map的key; 记得要用双引号"" 引起来

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"].
(#this.sex=="boy"?"BoyNB":"GirlNB")' -x 2

7、 通过 hashcode 指定 ClassLoader:

$ classloader -t
+-BootstrapClassLoader
+-jdk.internal.loader.ClassLoaders$PlatformClassLoader@301ec38b+-com.taobao.arthas.agent.ArthasClassloader@472067c7+-jdk.internal.loader.ClassLoaders$AppClassLoader@4b85612c+-org.springframework.boot.loader.LaunchedURLClassLoader@7f9a81e8$ ognl -c 7f9a81e8 @org.springframework.boot.SpringApplication@logger
@Slf4jLocationAwareLog[FQCN=@String[org.apache.commons.logging.LogAdapter$Slf4jLocationAwareLog],name=@String[org.springframework.boot.SpringApplication],logger=@Logger[Logger[org.springframework.boot.SpringApplication]],
]

对于只有唯一实例的 ClassLoader 可以通过 class name 指定,使用起来更加方便:

$ ognl --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader  @org.springframework.boot.SpringApplication@logger
@Slf4jLocationAwareLog[FQCN=@String[org.apache.commons.logging.LogAdapter$Slf4jLocationAwareLog],name=@String[org.springframework.boot.SpringApplication],logger=@Logger[Logger[org.springframework.boot.SpringApplication]],
]

参考

【Arthas】命令之ognl使用姿势 - 腾讯云开发者社区-腾讯云


http://www.ppmy.cn/news/56544.html

相关文章

Shell+VCS学习1

Shell脚本常见问题 mkdir rmdir rm mkdir 创建文件夹 mkdir -p filename-p 确保目录名称存在,不存在的就建一个。 mkdir -p runoob2/test若 runoob2 目录原本不存在,则建立一个。(注:本例若不加 -p 参数,且原本 ru…

【JAVA程序设计】(C00132)基于SSM的固定资产管理系统

基于SSM的固定资产管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 本系统为基于SSM的固定资产管理系统,本系统分为二种用户:超级管理员和普通管理员; 超级管理员功能: 首页查看、设备管理、平台账户管理、设备台账…

最接近的三数之和

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1: 输入:nums [-1,2,1,-4], target 1 输出:2 …

探究XServer中的字体系统:如何设置字体和字体缩放

Xorg server中的字体系统 随着计算机技术的不断发展,人们对于计算机的要求也越来越高。除了性能、功能和用户体验之外,用户对于计算机界面的要求也越来越高。而作为计算机界面的重要组成部分,字体系统在计算机界面中的地位也越来越重要。 字体…

【Java】继承和多态

目录 1.继承 1.1关键字super 1.2关键字protected 1.3关键字final 1.4组合 //小练习:三者乘积 2.多态 2.1重写override 2.2向上转型与向下转型 2.3运行时绑定 2.4多态 1.继承 定义:对子类的共性进行抽取并放到父类当中。 优点:达…

轻松剪辑、合并和添加特效,快速完成视频处理——掌握MoviePy库

🎬MoviePy: Python视频编辑🎥 😍 简介 你喜欢看电影吗?🍿不知道你有没有想过,如果能够自己编辑视频就好了!🤩 没错,现在有了MoviePy,Python视频编辑库&…

【Unity-UGUI控件全面解析】| RawImage 显示纹理组件详解

🎬【Unity-UGUI控件全面解析】| RawImage 显示纹理组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 相机映射,可充当小地图4.2 播放视频💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN�…

App Store上架流程/苹果app发布流程

第一步:拥有自己的苹果开发者账号: 开发账号分为两类:99美元(发布App Store用的,也就是上架苹果商店用这个);299美元(企业授信证书,不用上架appstore 亦可使用。弊端&am…