TT time tunnel时空隧道命令使用场景

场景1 记录请求时间和次数

生产环境一定要加 -n 参数,不然会打满jvm

[arthas@8868]$ tt -t org.fyh.arthas.controller.ProgressController test -n 5
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 99 ms, listenerId: 1
 INDEX      TIMESTAMP                    COST(ms)      IS-RET     IS-EXP      OBJECT               CLASS                                     METHOD
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1000       2022-09-20 16:21:06          617.5923      true       false       0x2fdd5af4           ProgressController                        test
 1001       2022-09-20 16:21:10          417.3191      true       false       0x2fdd5af4           ProgressController                        test


tt 命令记录2次请求,IS-RET=是否return, IS-EXP=是否exception, 

场景2 模拟内部发起请求
利用时空隧道重复执行,-i是上面的index, 相当是请求的镜像,包含了入参数,这个时候可以使用应用打印日志来判断是否重复执行成功

模拟index为1000的调用

[arthas@8868]$ tt -i 1000 -p
 RE-INDEX       1000
 GMT-REPLAY     2022-09-20 16:21:42
 OBJECT         0x2fdd5af4
 CLASS          org.fyh.arthas.controller.ProgressController
 METHOD         test
 PARAMETERS[0]  @Integer[2]
 IS-RETURN      true
 IS-EXCEPTION   false
 COST(ms)       613.1518
 RETURN-OBJ     @ApiResult[
                    code=@Integer[200],
                    msg=@String[OK],
                    data=null,
                ]
Time fragment[1000] successfully replayed 1 times.

模拟index为1001的调用

[arthas@8868]$ tt -i 1001 -p
 RE-INDEX       1001
 GMT-REPLAY     2022-09-20 16:21:57
 OBJECT         0x2fdd5af4
 CLASS          org.fyh.arthas.controller.ProgressController
 METHOD         test
 PARAMETERS[0]  @Integer[3]
 IS-RETURN      true
 IS-EXCEPTION   false
 COST(ms)       401.6286
 RETURN-OBJ     @ApiResult[
                    code=@Integer[200],
                    msg=@String[OK],
                    data=null,
                ]


场景3 获取到Spring Context,然后为所欲为,任意执行对象和方法
执行tt命令来记录RequestMappingHandlerAdapter#invokeHandlerMethod的请求

1. tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod
2. tt -i 1000 -w 'target.getApplicationContext()'
3. tt -i 1002 -w 'target.getApplicationContext().getBean("xxxServiceImpl").xxx()' 触发指定方法执行

备注1:因为我们是SpringMVC应用,所有请求都会被RequestMappingHandlerAdapter拦截
备注2:Arthas会把当前执行的对象放到target变量中;所以是‘target.getApplicationContext()’
备注3:一定要使用 #1 先监听这个类的方法调用,才可以获取#2 获取context

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值