背景
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 12、方法A的返回值当做方法B的入参, 执行多行表达式,赋值给临时变量,返回一个List
ognl '#value1=@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18),
#value2=@com.shirc.arthasexample.ognl.OgnlTest@setPerson(#value1),{#value1,#value2}' -x 23、方法入参是简单类型列表
ognl '@com.shirc.arthasexample.ognl.OgnlTest@getChilds({"test1","test2"})' -x 24、方法入参是一个复杂对象
ognl '#obj=new com.shirc.arthasexample.ognl.Shirc("test1",'test2'),
@com.shirc.arthasexample.ognl.OgnlTest@inputObj(#obj)' -x 25、方法入参是一个Map对象
ognl '#inputmap=#{ "foo" : "foo value", "bar" : "bar value" }, 
@com.shirc.arthasexample.ognl.OgnlTest@getMap(#inputmap)' -x 26、
#变量引用
 引用变量的方法是在变量名之前加上#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使用姿势 - 腾讯云开发者社区-腾讯云





![[JAVA]前后端分离智慧校园电子班牌系统源码微信带小程序](https://img-blog.csdnimg.cn/f97c98f2384c442b84b65ef406454797.png)













