• 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

  • 相关阅读:
    Pytorch 实现目标检测二(Pytorch 24)
    网关介绍和作用,Spring Cloud Gateway介绍
    问题排查:nginx能跑,但是只能跑一会,不能跑多了
    强烈推荐!超低温冰箱监控教程
    cocos creator 3.6 发布web手机端 加载进度条添加
    【C++】set和map的底层结构(AVL树&红黑树)
    【教程】大气化学在线耦合模式WRF/Chem
    webpack与vite的对比
    电脑桌面删除的文件回收站没有,电脑上桌面删除文件在回收站找不到怎么办
    jemalloc 5.3.0源码总结
  • 原文地址:https://blog.csdn.net/ffyyhh995511/article/details/126959722