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


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

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

    1. [arthas@8868]$ tt -t org.fyh.arthas.controller.ProgressController test -n 5
    2. Press Q or Ctrl+C to abort.
    3. Affect(class count: 1 , method count: 1) cost in 99 ms, listenerId: 1
    4. INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD
    5. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    6. 1000 2022-09-20 16:21:06 617.5923 true false 0x2fdd5af4 ProgressController test
    7. 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的调用

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

    模拟index为1001的调用

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


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

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

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

  • 相关阅读:
    5款超级好用的办公软件
    算法通关村第十五关:青铜-用4KB内存寻找重复元素
    回溯算法 | 排列问题 | leecode刷题笔记
    百万户家庭用气安全,中国电信NB-IoT网络贴心护航
    vxe-table 打包部署上线,校验样式失效
    【python】python内置函数——map()根据提供的函数对指定序列做映射
    我的算法笔记 | 我决定摆烂了
    IOI 2022 简要题解
    数商云:订单积压达 930 亿欧元,西门子如何通过供应链数字化转型缩短交货期
    Open3D 进阶(10)使用FilterReg算法对点云配准
  • 原文地址:https://blog.csdn.net/ffyyhh995511/article/details/126959722