arthas使用记录

package com.test.i18n;

public class I18nRes {

	private static final Logger LOGGER = LoggerFactory.getLogger(I18nRes.class);
	// 存放语言资源 Map<appId,Map<key,Map<lang,value>>,对app下的key值做唯一性校验
	private static Map<String, Map<String, Map<String, String>>> i18nResList = new HashMap<String, Map<String, Map<String, String>>>();
	public static Map<String, Map<String, Map<String, String>>> i18nMicroResList = new HashMap<>();
	// 文件对应的修改时间,用于支持scanner
	private static Map<String, Long> _fileInfo = new HashMap<String, Long>();
	// 存储文件对应 的key Map<path,List<key>>
	private static Map<String, List<String>> keys = new HashMap<String, List<String>>();

	public static Map<String, Long> getFileInfo() {
		return _fileInfo;
	}

	
}

2.静态变量查看

2.1普通查看

getstatic com.test.i18n.I18nRes i18nResList -x 3

2.2高级查看

2.2.1启动 Arthas 并连接到 JVM:
java -jar arthas-boot.jar
2.2.2 查找目标类的信息:
sc -d com.test.i18n.I18nRes   # 全类名

得到类加载器 ID 507b79f7,如果有多个类加载器,使用第一个。
在这里插入图片描述

2.2.3使用 ognl 命令获取键集合:
ognl -c 507b79f7 '@com.test.i18n.I18nRes@i18nResList.keySet()'
ognl -c 23f72d88 '@com.test.i18n.I18nRes@i18nResList.keySet()'

在这里插入图片描述

2.2.4使用 ognl 命令获取某个键对应的值:
ognl -c 507b79f7 '@com.test.i18n.I18nRes@i18nResList.get("someKey").get("nestedKey1").get("nestedKey2")'
ognl -c 23f72d88 '@com.test.i18n.I18nRes@i18nResList.get("com.crmpaas.apps.sales")'

在这里插入图片描述

3执行方法

3.1 执行静态方法

示例代码

package com.test.sdk.local;

@Component
public class SDK {
	private static final Logger LOGGER = LoggerFactory.getLogger(SDK.class);

	/**
	 * 引擎版本号
	 */
	public static String getVersion() {
		return AWSServerEngineConfiguration.getBpmnEngineVersion();
	}
}
3.1.1查找目标类:

在 Arthas 命令行界面中,使用 sc(search class)命令来查找目标类 com.test.sdk.local.SDK:

sc -d com.test.sdk.local.SDK
3.1.2查找目标方法:

使用 sm(search method)命令来查找目标类中的目标方法 getPlatformAPI:

sm com.test.sdk.local.SDK

这将列出 SDK 类中的所有方法,你可以找到 getPlatformAPI 方法的具体信息。

3.1.3调用静态方法:

使用 ognl(Object-Graph Navigation Language)命令来调用静态方法 getPlatformAPI。OGNL 是 Arthas 提供的一种表达式语言,可以用于操作 Java 对象。

ognl -c xxxxx  '@com.test.sdk.local.SDK@getPlatformAPI()'

这里的 @ 符号表示静态方法调用。 -c 指定类加载器 ognl 命令将执行这个方法并打印结果。

[arthas@11]$ sc -d com.test.sdk.local.SDK
 class-info        com.test.sdk.local.SDK                                                                                                                                        
 code-source       /data/aws/bin/lib/aws-sdk-7.0.4.jar                                                                                                                                 
 name              com.test.sdk.local.SDK                                                                                                                                        
 isInterface       false                                                                                                                                                               
 isAnnotation      false                                                                                                                                                               
 isEnum            false                                                                                                                                                               
 isAnonymousClass  false                                                                                                                                                               
 isArray           false                                                                                                                                                               
 isLocalClass      false                                                                                                                                                               
 isMemberClass     false                                                                                                                                                               
 isPrimitive       false                                                                                                                                                               
 isSynthetic       false                                                                                                                                                               
 simple-name       SDK                                                                                                                                                                 
 modifier          public                                                                                                                                                              
 annotation        org.springframework.stereotype.Component                                                                                                                            
 interfaces                                                                                                                                                                            
 super-class       +-java.lang.Object                                                                                                                                                  
 class-loader      +-startJarLoader@7abe27bf                                                                                                                                           
                     +-jdk.internal.loader.ClassLoaders$AppClassLoader@311d617d                                                                                                        
                       +-jdk.internal.loader.ClassLoaders$PlatformClassLoader@4925f4f5                                                                                                 
 classLoaderHash   7abe27bf                                                                                                                                                            

Affect(row-cnt:1) cost in 159 ms.
[arthas@11]$ ognl -c 7abe27bf '@com.test.sdk.local.SDK@getPlatformAPI()'
@PlatformAPIImpl[
]
[arthas@11]$ sm com.test.sdk.local.SDK
com.test.sdk.local.SDK <init>()V
com.test.sdk.local.SDK getVersion()Ljava/lang/String;
com.test.sdk.local.SDK getAppAPI()Lcom/test/sdk/local/api/AppAPI;

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arthas是一个Java诊断工具,它支持JDK 6+,可以在Linux、Mac和Windows上使用,并采用命令行交互模式。它提供了丰富的Tab自动补全功能,方便进行问题的定位和诊断。你可以使用Arthas来执行一些常用的命令,比如dump命令可以将已加载类的字节码文件保存到特定的目录中,classloader命令可以获取类加载器的信息,monitor命令可以监控指定类中方法的执行情况,watch命令可以观察指定方法的调用情况,trace命令可以对方法内部调用路径进行追踪,并输出方法路径上每个节点上的耗时,stack命令可以输出当前方法被调用的路径,tt命令可以记录指定方法每次调用的入参和返回信息,options命令可以控制全局开关,profiler命令可以生成火焰图。你可以通过下载arthas-boot.jar并运行它来安装Arthas使用reset命令可以重置被Arthas增强过的类,当Arthas服务端关闭时,所有增强过的类都会被还原。你可以使用version命令来查看当前Arthas的版本。如果你想获取反编译代码,可以使用jad命令,例如jad --source-only com.taopanfeng.feigndemoa8001.FeignConfiguration。希望这些信息对你有帮助。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Arthas使用教程(8大分类)](https://blog.csdn.net/weixin_44624117/article/details/125238249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Arthas(阿尔萨斯)使用手册](https://blog.csdn.net/qq_38377190/article/details/125409630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值