arthas排查问题:
使用中会用到的命令:
1、jad反编译,尝试反编译后修改再热部署,失败了,后面有时间再试下
1)反编译
$ jad --source-only *.DownLoadRuleConsumer > /tmp/DownLoadRuleConsumer.java
2)修改文件
$ vim /tmp/UserController.java
3)查找加载的 ClassLoader
$ $ sc -d *DownLoadRuleConsumer | grep classLoaderHash
classLoaderHash 6bc28484
4)编译java文件到class文件 (java->class)
$ mc -c 506c589e /tmp/UserController.java -d /tmp
问题:Ⅰ实践中,直接编译jad出来的文件,会报错提示java文件格式异常 Ⅱlog4j的注解不生效,提示log未找到
因此:直接使用idea项目里面改了java文件,传到服务器上面,修改后用arthas编译生成临时文件
5)热更新 (替换class)
$ redefine /tmp/com/example/demo/arthas/user/UserController.class
redefine success, size: 1
2、watch com.xxx.xxx.xxxService 方法名 "{params, returnObj}" -x 5 -b
3、看方法执行时长
trace --skipJDKMethod false demo.MathGame run
小技巧:
1、获取hutool的SpringUtil类的id,这个id通常不会变化,保存着就行
sc -d cn.hutool.extra.spring.SpringUtil
2、通过hutool获取bean,来执行测试方法:
ognl -c 506c589e '#obj='',
@cn.hutool.extra.spring.SpringUtil@getBean('policySetService').listEnableCloudPolicySetByPodIds(#obj)'
[入参可以再优化,后面要看下怎么传递]