-
Notifications
You must be signed in to change notification settings - Fork 7.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Arthas的一些特殊用法文档说明 #71
Comments
查看第一个参数:
查看第一个参数的size:
将结果按name属性投影:
按条件过滤:
过滤后统计:
判断字符串相等比如第一个参数是String类型:
判断long型
|
子表达式求值:
选择第一个满足条件:
选择最后一个满足条件:
|
访问静态变量
|
调用静态方法
调用静态方法再调用非静态方法
|
匹配线程&正则多个类多个方法
|
按条件过滤:
实际用下来,需要添加 .size()>0,并且条件表达式和返回表达式是两个表达式。 |
内部类怎么使用 |
|
|
一定要加 size()>0 才行,老哥thanks |
[arthas@20]$ ognl '@com.envisioniot.enos.iot_log_sdk.core.ESClient@defaultESClient'
Failed to get static, exception message: ognl.OgnlException: Could not get static field defaultESClient from class com.envisioniot.enos.iot_log_sdk.core.ESClient [java.lang.ClassNotFoundException: Unable to resolve class: com.envisioniot.enos.iot_log_sdk.core.ESClient], please check $HOME/logs/arthas/arthas.log for more details.
[arthas@20]$
[arthas@20]$ getstatic com.envisioniot.enos.iot_log_sdk.core.ESClient defaultESClient
field: defaultESClient
@ESClient[
logger=@Logger[com.envisioniot.enos.iot_log_sdk.core.ESClient:INFO in config_web],
client=@PreBuiltTransportClient[org.elasticsearch.transport.client.PreBuiltTransportClient@61f30b80],
indicesAdminClient=@IndicesAdmin[org.elasticsearch.client.support.AbstractClient$IndicesAdmin@73b9bf19],
connected=@Boolean[true],
bulkProcessor=@BulkProcessor[org.elasticsearch.action.bulk.BulkProcessor@4ee692a3],
DEFAULT_TYPE=@String[default_type],
mqttLogClient=null,
eventManageLogClient=null,
serviceInvokeLogClient=null,
attrHistoryLogClient=null,
defaultESClient=@ESClient[com.envisioniot.enos.iot_log_sdk.core.ESClient@379aef66],
]
Affect(row-cnt:1) cost in 11 ms. 为啥ognl不起作用而getstatic却在这里起作用? 我是在tomcat容器测试得。 |
ognl命令默认只会去 SystemClassLoader 里找类。 getstatic 命令会直接找所有JVM里加载的类,而tomcat的classloader是自己的,所以只有 getstatic 命令能找到。 ognl 命令要显式指定classloader 。 |
请问,watch命令查看returnObj中的属性值怎么写?
|
重载的方法怎么查看指定的方法呢 |
加上-x 3 |
请教一个问题:如下命令,测试的时候把watch换成stack就没反应了。 |
能watch方法内的局部变量的值吗? |
不能,用 |
重载方法有办法trace 么 |
请问watch命令:条件表达式中有特殊字符,如何转义,用ongl的转义好像不行。 |
可以直接用
|
入參是List的类型, |
怎么访问类变量的值呢?非静态变量 |
watch命令打印出来的入参是结果都没有包含父类,需要加什么参数吗 |
我的解决方案是调用公共类去筛选出来,arthas支持调用static方法的,你可以写一个方法例如 然后 伪代码写的有点粗糙,但是差不多这个意思 |
watch xxx xxx '{params,returnObj,throwExp}' 'params.length == 4 && params[1] instanceof java.lang.Throwable && params[0] == -8' -n 5 -x 3 可以在条件里面这样写,根据参数个数、参数类型和已知入参数据指定 |
watch com.XXX xxx '{params,returnObj,throwExp}' -n 5 -x 3 'params[0] instanceof xxx' 可以这样判断参数类型 |
试试这个吧 但是不太建议这样做,毕竟强转了,可以考虑写一个static方法,然后调用其来筛选 |
可以new对象并赋值吗 |
ongl 表达式怎么传Long 类型参数呢? ognl -c 3af49f1c '@util.ApplicationContextUtil@getBeanByType(@CacheService@class).getQCache((Long)1243860912981827585)' |
试过了 不行呢 |
returnObj是一个map,map的key是class对象时, 怎么查看某个key的value呢,此时我的ognl表达式应该怎么写? |
vmtool --action getInstances --className CLAZZ --express '(#count=0, instances.{#this.wrotePostion}.{#el=#this, count=count+el},#count)' -x 2 在看来大家的用法后,我想实现对所有CLAZZ对象的wrotePostion属性求数值和,命令如上,但是报错了,如下: 我对ognl表达式不是特别熟悉,请教下正确的应该怎么写 |
使用命令进行重做调用,但是如果执行方法需要获取线程上下文,上下文ThreadLocal数据没有保存? |
watch CouponManageFacadeImpl queryCouponByCouponId '{params,returnObj,throwExp}' 'params[0].equals("1")' -n 5 -x 3 这种可以完全匹配后打印出来结果。如果没打印出来可能是压根没执行到这个位置。 |
lambda 应该如何 watch 或 trace ? |
|
但是watch里面这么写依旧会报错
|
watch com.aa.bb cc -x 3 '@com.alibaba.fastjson.JSON@toJSONString(params[0],@com.alibaba.fastjson.serializer.SerializerFeature@WriteMapNullValue)' |
还是不行呢,两种写法报的相同的错误,3.6.7,3.7.1两个版本都试了
|
没仔细看这里是可变参数要写成数组 new com.alibaba.fastjson.serializer.SerializerFeature[]{@com.alibaba.fastjson.serializer.SerializerFeature@WriteMapNullValue} watch com.wangji92.arthas.plugin.demo.controller.CommonController userFastJson '@com.alibaba.fastjson.JSON@toJSONString(params[0],new com.alibaba.fastjson.serializer.SerializerFeature[]{@com.alibaba.fastjson.serializer.SerializerFeature@WriteMapNullValue})' -v -n 5 -x 3 '1==1' |
https://www.pingidentity.com/en/resources/blog/post/declaring-variables-in-ognl.html
|
watch查看内部类报找不到怎么办 |
@intprogrammer 这里~ |
怎么使用ognl调用静态方法,传入一个枚举类型的值 |
``ognl -x 3 '@XXXClass@testEnum(@XXXX2Class.TestEnum@COMMON_1)' -c 197a18de` 和 静态字段类似 ,枚举其实就是语法糖 当前类的静态字段 |
感谢。
|
@hengyunabc 大佬,已知一个对象的内存地址,有办法查看这个对象吗? vmtool只能list出来 不能指定某个内存地址 |
收集Arthas里的一些特殊用法。
ognl表达式官网:https://commons.apache.org/dormant/commons-ognl/language-guide.html
The text was updated successfully, but these errors were encountered: