Arthas 临时执行线上 SpringBoot 项目Jar包的静态方法

原因:

线上运行需要打印一下静态方法里面的值,为了不停止程序,使用 Arthas执行com.ld.common.util.cache.CacheManager类中 getAllCacheModels() 静态方法。

注意:SpringBoot 项目Jar 包ClassLoader与 Arthas 默认的 SystemClassLoader不一致,在使用 Arthas 中 ognl 命令时需要指定加载目标类的 ClassLoader。


使用步骤:

1、 获取目标类的 ClassLoader 的 hashcode 两种方式

        1.1 方式一:sc 命令 更加类搜索  
    命令:sc -d 类名

sc -d com.ld.common.util.cache.CacheManager

企业微信截图_16382356495715.png

        1.2 方式二:sm 命令,根据方法搜索
    命令:sm -d 类名 方法名

sm -d com.ld.common.util.cache.CacheManager getAllCacheModels

企业微信截图_16382356255230.png


2、如果步骤1中返回信息:Affect(row-cnt:0),则表示该类还未执行加载,需要使用 classloader 命令加载该类后执行该类静态方法,反之直接进行步骤3。

        2.1 在加载器列表中找到 org.springframework.boot.loader.LaunchedURLClassLoader (main方法启动)或 ParallelWebappClassLoader(tomcat启动)加载器的 hash。
    命令:classloader -l

企业微信截图_16382356495715.png

        2.2 使用 SpringBoot 类加载器加载目标类。
    命令:classloader -c 类加载器hash值 --load 类名

classloader -c 20a14b55 --load com.ld.common.util.cache.CacheManager


3、 执行ognl表达式

    命令:ognl -c 类加载器hash值 类方法

ognl -c 20a14b55 '@com.ld.common.util.cache.CacheManager@getAllCacheModels()'


    返回信息(返回值):

企业微信截图_16382616752602.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值