ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

arthas使用总结

2022-01-09 09:32:58  阅读:217  来源: 互联网

标签:总结 demo ClassLoader arthas hashcode 使用 com tt


引言

这里记录一下我在使用arthas排查现场问题时,使用的几个主要命令,怕自己忘了,写下来到时候可以参考。

我的个人博客:我心永恒
原文地址:arthas使用总结

查看类加载的信息

sc -d <ClassName>
参数名称 参数说明
class-pattern 类名表达式匹配
method-pattern 方法名表达式匹配
[d] 输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的ClassLoader等详细信息。 如果一个类被多个ClassLoader所加载,则会出现多次
[E] 开启正则表达式匹配,默认为通配符匹配
[f] 输出当前类的成员变量信息(需要配合参数-d一起使用)
[x:] 指定输出静态变量时属性的遍历深度,默认为 0,即直接使用 toString 输出
[c:] 指定class的 ClassLoader 的 hashcode
[classLoaderClass:] 指定执行表达式的 ClassLoader 的 class name
[n:] 具有详细信息的匹配类的最大数量(默认为100)
#模糊搜索
sc demo.*

# 打印类的详细信息
sc -d demo.MathGame

# 打印出类的Field信息
sc -d -f demo.MathGame

查看类的静态变量

# 查看类的静态变量 getstatic ${类名} ${属性名}
getstatic cn.lw.ClassName propName

注意hashcode是变化的,需要先查看当前的ClassLoader信息,使用sc -d <ClassName>提取对应ClassLoader的hashcode。 指定classLoader 注意hashcode是变化的,需要先查看当前的ClassLoader信息,使用sc -d <ClassName>提取对应ClassLoader的hashcode。 如果你使用-c,你需要手动输入hashcode:-c <hashcode>

getstatic -c 3d4eac69 demo.MathGame random

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

getstatic --classLoaderClass sun.misc.Launcher$AppClassLoader demo.MathGame random

注: 这里classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader,而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoader。 --classLoaderClass 的值是ClassLoader的类名,只有匹配到唯一的ClassLoader实例时才能工作,目的是方便输入通用命令,而-c <hashcode>是动态变化的。 如果该静态属性是一个复杂对象,还可以支持在该属性上通过ognl表示进行遍历,过滤,访问对象的内部属性等操作。

查看线上代码

jad cn.com.xxx

拦截方法的入参和出参 获取Spring中的bean 查看配置参数 ## 记录方法调用的信息

tt命令的文档在此:https://arthas.aliyun.com/doc/tt.html

tt -t demo.MathGame primeFactors -n ${记录次数}  params[0].mobile==13989838402
# 跟踪完了之后
tt -i 1003 -p  # -p不需要参数,它的意思是重新将这个方法调用一次

获取Spring中的bean

# 先这样搞
tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod -n 3

# 随便访问一个web接口

# 然后再这样搞
tt -i 1000 -w 'target.getApplicationContext().getBean(rocketMQConsumerManagerImpl)'

tt -i 1000 -w 'target.getApplicationContext().getBean(rocketMQConsumerManagerImpl).getTargetSource()'

tt -i 1000 -w 'target.getApplicationContext().getBean(rocketMQConsumerManagerImpl).getTargetSource().target'

参考:https://blog.csdn.net/yunqiinsight/article/details/86710798

查看方法调用栈

# 方法调用栈
stack org.slf4j.Logger warn params[1].indexOf('roadblockindex.bin')>-1 -x 3 -n 2

arthas 调用类的静态方法

Arthas监听输入参数是否包含某一字符串

监听com.demo.cloud.jpa.util.JPAUtil类中的executeNativeQuery方法,ognl条件参数:只检测包含base_point字符串的输入 watch com.demo.cloud.jpa.util.JPAUtil executeNativeQuery {params} params[0].indexOf('base_point')>-1 -x 3

cn.com.egova.bizbase.tools.HttpUtils doPost

tt -t cn.com.egova.base.tools.EgovaRedisUtils getStringValue  params[0].indexOf('cfg:VIDEO_CALL_RONGYUN_SERVER_ADDRESS')>-1 -x 3 -n 100

'egova:cfg:VIDEO_CALL_RONGYUN_SERVER_ADDRESS'

参考

我的个人博客:我心永恒
原文地址:arthas使用总结

标签:总结,demo,ClassLoader,arthas,hashcode,使用,com,tt
来源: https://www.cnblogs.com/tuhooo/p/15780324.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有