jvm调试工具arthas的tt命令记录参数和返回值使用案例

方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测。

时空隧道能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。

于是乎,TimeTunnel 命令就诞生了。

对于一个最基本的使用来说,就是记录下当前方法的每次调用环境现场。

[arthas@25435]$ tt -t com.demo.system.service.LoginService setStudentInfo
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 58 ms, listenerId: 2
 INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP  OBJECT          CLASS                         METHOD                        
------------------------------------------------------------------------------------------------------------------------------------
 1000    2021-08-25 13:45:52  0.101528  true    false   0x226d408b      LoginService                  setStudentInfo                

 参数包括类和具体的方法。

检索调用记录

当你用 tt 记录了一大片的时间片段之后,你希望能从中筛选出自己需要的时间片段,这个时候你就需要对现有记录进行检索。

[arthas@25435]$ tt -l
 INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP  OBJECT          CLASS                         METHOD                        
------------------------------------------------------------------------------------------------------------------------------------
 1000    2021-08-25 13:45:52  0.101528  true    false   0x226d408b      LoginService                  setStudentInfo                
Affect(row-cnt:1) cost in 1 ms.

可以看到有一次调用记录。 

查看调用信息

对于具体一个时间片的信息而言,你可以通过 -i 参数后边跟着对应的 INDEX 编号查看到他的详细信息。

[arthas@25435]$ tt -i 1000
 INDEX          1000                                                                                                                
 GMT-CREATE     2021-08-25 13:45:52                                                                                                 
 COST(ms)       0.101528                                                                                                            
 OBJECT         0x226d408b                                                                                                          
 CLASS          com.demo.system.service.LoginService                                                                              
 METHOD         setStudentInfo                                                                                                      
 IS-RETURN      true                                                                                                                
 IS-EXCEPTION   false                                                                                                               
 PARAMETERS[0]  @RequestFacade[                                                                                                     
                    request=@Request[org.apache.catalina.connector.Request@46d2fb98],                                               
                    sm=@StringManager[org.apache.tomcat.util.res.StringManager@3fb5a803],                                           
                ]                                                                                                                   
 PARAMETERS[1]  @StudentInfo[                                                                                                       
                    userId=@Long[100],                                                                                              
                    userName=@String[xxx],                                                                                          
                    userNo=@String[14242919900721123X],                                                                             
                    schoolNo=@String[10000114],                                                                                     
                    accountBalance=null,                                                                                            
                    currSelect=@Boolean[false],                                                                                     
                    orgNo=@String[70],                                                                                              
                    loginName=null,                                                                                                 
                ]                                                                                                                   
 RETURN-OBJ     @Boolean[false]                                                                                                     
Affect(row-cnt:1) cost in 4 ms.

通过-i选项,可以查看调用记录的具体信息。 

 重做一次调用

当你稍稍做了一些调整之后,你可能需要前端系统重新触发一次你的调用,此时需要前端配合联调的同学再次发起一次调用。而有些场景下,这个调用不是这么好触发的。

tt 命令由于保存了当时调用的所有现场信息,所以我们可以自己主动对一个 INDEX 编号的时间片自主发起一次调用,从而解放你的沟通成本。此时你需要 -p 参数。通过 --replay-times 指定 调用次数,通过 --replay-interval 指定多次调用间隔(单位ms, 默认1000ms)

$ tt -i 1004 -p

对调用记录进行重复调用。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值