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

在这里插入图片描述

文章目录

  • 二、命令列表
    • 2.3 monitor/watch/trace/stack/tt 相关
      • 2.3.4 tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测)
        • 举例1:记录调用
        • 举例2:显示所有已经记录的列表
        • 举例3:查看某条记录详细信息
        • 举例4:tt对重载的支持
        • 举例5:重做一次调用

二、命令列表

2.3 monitor/watch/trace/stack/tt 相关

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

使用场景

watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。

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

提示

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

注意事项

  • tt 命令的实现是:把函数的入参/返回值等,保存到一个Map<Integer, TimeFragment>里,默认的大小是 100。
  • tt 相关功能在使用完之后,需要手动释放内存,否则长时间可能导致OOM。退出 arthas 不会自动清除 tt 的缓存 map。
  • 命令参数解析 -t:tt 命令有很多个主参数,-t 就是其中之一。这个参数的表明希望记录下类 *Testprint 方法的每次执行情况。
  • 命令参数解析 -n 3:当你执行一个调用量不高的方法时可能你还能有足够的时间用 CTRL+C 中断 tt 命令记录的过程,但如果遇到调用量非常大的方法,瞬间就能将你的 JVM 内存撑爆。此时你可以通过 -n 参数指定你需要记录的次数,当达到记录次数时 Arthas 会主动中断 tt 命令的记录过程,避免人工操作无法停止的情况。
  • 命令参数解析 -m 1:通过 -m 参数指定 Class 匹配的最大数量,防止匹配到的 Class 数量太多导致 JVM 挂起,默认值是 50。

参数说明:

tt的参数说明
-t记录某个方法在一个时间段中的调用
-l显示所有已经记录的列表
-n 次数只记录多少次
-s 表达式搜索表达式
-i 索引号查看指定索引号的详细调用信息
-p重新调用:指定的索引号时间碎片

监控的维度说明:

表格字段字段解释
INDEX时间片段记录编号,每一个编号代表着一次调用,后续 tt 还有很多命令都是基于此编号指定记录操作,非常重要。
TIMESTAMP方法执行的本机时间,记录了这个时间片段所发生的本机时间
COST(ms)方法执行的耗时
IS-RET方法是否以正常返回的形式结束
IS-EXP方法是否以抛异常的形式结束
OBJECT执行对象的hashCode(),注意,曾经有人误认为是对象在 JVM 中的内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体
CLASS执行的类名
METHOD执行的方法名
举例1:记录调用

基础语法

tt -t 全路径类名 方法名

[arthas@7265]$ tt -t com.hero.lte.ems.security.service.impl.LdapService login
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 224 ms, listenerId: 6INDEX         TIMESTAMP                           COST(ms)          IS-RET         IS-EXP        OBJECT                     CLASS                                                 METHOD                                               
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------1000          2024-09-19 13:40:59                 174.854817        true           false         0x45b76c27                 LdapService                                           login                                                1001          2024-09-19 13:41:11                 7.661214          true           false         0x45b76c27                 LdapService                                           login                                                
[arthas@7265]$
举例2:显示所有已经记录的列表

基础语法

tt -l

[arthas@7265]$ tt -lINDEX         TIMESTAMP                           COST(ms)          IS-RET         IS-EXP        OBJECT                     CLASS                                                 METHOD                                               
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------1000          2024-09-19 13:40:59                 174.854817        true           false         0x45b76c27                 LdapService                                           login                                                1001          2024-09-19 13:41:11                 7.661214          true           false         0x45b76c27                 LdapService                                           login                                                
Affect(row-cnt:2) cost in 1 ms.
[arthas@7265]$ 
举例3:查看某条记录详细信息

基础语法

tt -i INDEX

[arthas@7265]$ tt -i 1001INDEX          1001                                                                                                                                                                                                                    GMT-CREATE     2024-09-19 13:41:11                                                                                                                                                                                                     COST(ms)       7.661214                                                                                                                                                                                                                OBJECT         0x45b76c27                                                                                                                                                                                                              CLASS          com.hero.lte.ems.security.service.impl.LdapService                                                                                                                                                                      METHOD         login                                                                                                                                                                                                                   IS-RETURN      true                                                                                                                                                                                                                    IS-EXCEPTION   false                                                                                                                                                                                                                   PARAMETERS[0]  @LdapLoginRequest[                                                                                                                                                                                                      username=@String[testuser2],                                                                                                                                                                                        password=@String[Hero@1993],                                                                                                                                                                                        principal=@String[testuser2@MS-DCS.BEE.VIMPELCOM.RU],                                                                                                                                                               keytabFilePath=null,                                                                                                                                                                                                ldapFlag=null,                                                                                                                                                                                                      domainName=@String[ms-dcs.bee.vimpelcom.ru],                                                                                                                                                                        baseDn=@String[dc=ms-dcs,dc=bee,dc=vimpelcom,dc=ru],                                                                                                                                                                adminBindDn=@String[cn=Tech_Hytera_MS,ou=TechDir_Msk,ou=Moscow,dc=ms-dcs,dc=bee,dc=vimpelcom,dc=ru],                                                                                                                adminBindPassword=@String[Bingo@1993],                                                                                                                                                                              userSearchDn=@String[],                                                                                                                                                                                             userSearchScope=@Integer[2],                                                                                                                                                                                        userIdAttribute=@String[sAMAccountName],                                                                                                                                                                            groupSearchDn=@String[DC=ms-dcs,DC=bee,DC=vimpelcom,DC=ru],                                                                                                                                                         groupSearchScope=@Integer[2],                                                                                                                                                                                       groupFilter=@String[(objectClass=*)],                                                                                                                                                                               groupMemberAttribute=@String[member],                                                                                                                                                                               createTime=@Date[2024-09-17 16:20:38,000],                                                                                                                                                                          updateTime=@Date[2024-09-17 16:20:38,000],                                                                                                                                                                          ldapConnectionSecurityMode=@Integer[0],                                                                                                                                                                             port=@Integer[636],                                                                                                                                                                                                 ignoreReferrals=@Integer[0],                                                                                                                                                                                        enableFullDnForGroupMemberAttribute=@Integer[0],                                                                                                                                                                    validGroup=@String[testou1,APP_Hytera_MS],                                                                                                                                                                          searchGroupFilter=@String[(&(objectClass=*)(member=*))],                                                                                                                                                            ]                                                                                                                                                                                                                       RETURN-OBJ     @ResultSet[                                                                                                                                                                                                             errorCode=@String[43],                                                                                                                                                                                              errorString=@String[kerberos authentication failed.],                                                                                                                                                               errorParams=null,                                                                                                                                                                                                   resultVal=null,                                                                                                                                                                                                     ]                                                                                                                                                                                                                       
Affect(row-cnt:1) cost in 34 ms.
[arthas@7265]$
举例4:tt对重载的支持

不知道大家是否有在使用过程中遇到以下困惑

Arthas 似乎很难区分出重载的方法
我只需要观察特定参数,但是 tt 却全部都给我记录了下来
条件表达式也是用 OGNL 来编写,核心的判断对象依然是 Advice 对象。除了 tt 命令之外,watch、trace、stack 命令也都支持条件表达式。

解决方法重载:

#	指定入参的长度=1
tt -t *Test print params.length==1`
#	指定入参的类型
tt -t *Test print 'params[1] instanceof Integer
#	指定固定的入参值
tt -t *Test print params[0].mobile=="13989838402
举例5:重做一次调用

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

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

基础语法

tt -i INDEX -p

[arthas@7265]$ tt -i 1001 -pRE-INDEX       1001                                                                                                                                                                                                                    GMT-REPLAY     2024-09-19 14:00:54                                                                                                                                                                                                     OBJECT         0x45b76c27                                                                                                                                                                                                              CLASS          com.hero.lte.ems.security.service.impl.LdapService                                                                                                                                                                      METHOD         login                                                                                                                                                                                                                   PARAMETERS[0]  @LdapLoginRequest[                                                                                                                                                                                                      username=@String[testuser2],                                                                                                                                                                                        password=@String[Hero@1993],                                                                                                                                                                                        principal=@String[testuser2@MS-DCS.BEE.VIMPELCOM.RU],                                                                                                                                                               keytabFilePath=null,                                                                                                                                                                                                ldapFlag=null,                                                                                                                                                                                                      domainName=@String[ms-dcs.bee.vimpelcom.ru],                                                                                                                                                                        baseDn=@String[dc=ms-dcs,dc=bee,dc=vimpelcom,dc=ru],                                                                                                                                                                adminBindDn=@String[cn=Tech_Hytera_MS,ou=TechDir_Msk,ou=Moscow,dc=ms-dcs,dc=bee,dc=vimpelcom,dc=ru],                                                                                                                adminBindPassword=@String[Bingo@1993],                                                                                                                                                                              userSearchDn=@String[],                                                                                                                                                                                             userSearchScope=@Integer[2],                                                                                                                                                                                        userIdAttribute=@String[sAMAccountName],                                                                                                                                                                            groupSearchDn=@String[DC=ms-dcs,DC=bee,DC=vimpelcom,DC=ru],                                                                                                                                                         groupSearchScope=@Integer[2],                                                                                                                                                                                       groupFilter=@String[(objectClass=*)],                                                                                                                                                                               groupMemberAttribute=@String[member],                                                                                                                                                                               createTime=@Date[2024-09-17 16:20:38,000],                                                                                                                                                                          updateTime=@Date[2024-09-17 16:20:38,000],                                                                                                                                                                          ldapConnectionSecurityMode=@Integer[0],                                                                                                                                                                             port=@Integer[636],                                                                                                                                                                                                 ignoreReferrals=@Integer[0],                                                                                                                                                                                        enableFullDnForGroupMemberAttribute=@Integer[0],                                                                                                                                                                    validGroup=@String[testou1,APP_Hytera_MS],                                                                                                                                                                          searchGroupFilter=@String[(&(objectClass=*)(member=*))],                                                                                                                                                            ]                                                                                                                                                                                                                       IS-RETURN      true                                                                                                                                                                                                                    IS-EXCEPTION   false                                                                                                                                                                                                                   COST(ms)       39.397075                                                                                                                                                                                                               RETURN-OBJ     @ResultSet[                                                                                                                                                                                                             errorCode=@String[43],                                                                                                                                                                                              errorString=@String[kerberos authentication failed.],                                                                                                                                                               errorParams=null,                                                                                                                                                                                                   resultVal=null,                                                                                                                                                                                                     ]                                                                                                                                                                                                                       
Time fragment[1001] successfully replayed 1 times.
[arthas@7265]$ 

你会发现结果虽然一样,但调用的路径发生了变化,由原来的程序发起变成了 Arthas 自己的内部线程发起的调用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550067.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

系统集成项目管理工程师难度如何?

软考中级职称系统集成项目管理工程师是中级各专业资格中考试难度较小的&#xff0c;考试相对比较容易&#xff0c;通过率一般在20%左右&#xff0c;适合零基础考生或基础薄弱考生报考。但是考生还是需要认真进行备考&#xff0c;系统集成项目管理工程师综合知识考察的范围比较广…

【AI学习】DDPM 无条件去噪扩散概率模型实现(pytorch)

这里主要使用pytorch实现基本的无条件去噪扩散模型&#xff0c;理论上面的推导这里不重点介绍。 原文理论参考&#xff1a; 前向和反向过程示意图 前向过程和后向过程 扩散过程包括正向过程和反向过程。前向过程是基于噪声调度的预定马尔可夫链。噪声表是一组方差 &#xff0…

物理学基础精解【40】

文章目录 矢量积矢量积&#xff08;又称叉积、外积&#xff09;的几何意义一、面积表示二、垂直性三、方向性四、应用实例五、数学表达 矢量积&#xff08;叉积&#xff09;的坐标表示法矢量积的坐标表示法的几何意义矢量积的性质矢量积的应用 矢量积&#xff08;又称叉积、外积…

OptiTrack与Xsens光、惯动捕中用于动画制作的尖端设备对比

随着动画、电影、游戏等数字内容行业的迅速发展&#xff0c;捕捉演员的动作并将其转化为虚拟角色的技术越来越受到重视。两种主要的动作捕捉技术——光学捕捉系统和惯性动作捕捉系统——代表了当前市场的最前沿。本文将对比两种技术的代表性设备&#xff1a;OptiTrack的光学动作…

服务器数据恢复—raid磁盘故障导致数据库文件损坏的数据恢复案例

服务器存储数据恢复环境&故障&#xff1a; 存储中有一组由3块SAS硬盘组建的raid。上层win server操作系统层面划分了3个分区&#xff0c;数据库存放在D分区&#xff0c;备份存放在E分区。 RAID中一块硬盘的指示灯亮红色&#xff0c;D分区无法识别&#xff1b;E分区可识别&a…

使用PHP获取商品描述API:解锁电商数据的金钥匙

在电子商务领域&#xff0c;获取商品的详细信息对于商家和消费者来说至关重要。taobao作为中国最大的在线购物平台之一&#xff0c;提供了丰富的API接口供开发者使用。其中&#xff0c;商品描述API允许开发者获取商品的详细描述&#xff0c;这对于提升用户体验和优化商品页面至…

How FAR ARE WE FROM AGI?(ICLR AGI Workshop 2024)概览

关注B站可以观看更多实战教学视频&#xff1a;hallo128的个人空间 How FAR ARE WE FROM AGI?官网 How FAR ARE WE FROM AGI?&#xff08;ICLR AGI Workshop 2024&#xff09; 该研讨会将于2024年5月11日在奥地利维也纳以混合模式举行&#xff0c;作为 ICLR 2024年会议的一部…

2024平价电容笔推荐!精选五大靠谱电容笔测评盘点!

现在电子设备已经成为我们生活、学习和工作中不可或缺的重要工具。而电容笔作为与电子设备紧密配合的配件&#xff0c;其重要性也日益凸显&#xff0c;为我们的数字操作体验带来极大的便利和提升。然而&#xff0c;市场上电容笔的品牌众多&#xff0c;价格、性能和品质参差不齐…

MES系统实现制造业生产自动化、智能化与透明化

万界星空科技MES系统通过集成硬件和软件&#xff0c;实现对生产过程的实时监控、数据采集、任务调度、资源分配、质量控制、文档管理等功能&#xff0c;旨在优化企业的生产流程&#xff0c;提高生产效率&#xff0c;降低成本&#xff0c;并确保产品质量。涵盖了离散制造、流程制…

诚实的人力资源招聘人员告诉你,为什么大多数求职者无法获得工作机会

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Arthas watch (方法执行数据观测)

文章目录 二、命令列表2.3 monitor/watch/trace/stack/tt 相关2.3.5 watch &#xff08;方法执行数据观测&#xff09;举例1:监控方法举例2&#xff1a;同时观察函数调用前和函数返回后 二、命令列表 2.3 monitor/watch/trace/stack/tt 相关 2.3.5 watch &#xff08;方法执行…

[论文精读]Membership Inference Attacks Against Machine Learning Models

中文译名&#xff1a;针对机器学习模型的成员推理攻击 会议名称&#xff1a;2017 IEEE Symposium on Security and Privacy (SP) 发布链接&#xff1a;Membership Inference Attacks Against Machine Learning Models | IEEE Conference Publication | IEEE Xplore CODE:Git…

34 | 实战一(上):通过一段ID生成器代码,学习如何发现代码质量问题

在前面几篇文章中&#xff0c;我们讲了一些跟重构相关的理论知识&#xff0c;比如&#xff1a;持续重构、单元测试、代码的可测试性、解耦、编码规范。用一句话总结一下&#xff0c;重构就是发现代码质量问题&#xff0c;并且对其进行优化的过程。 前面的内容相对还是偏理论。…

中腾国际团餐产业集团经验谈:如何让上海央厨配送更高效、更安心

上海作为国际大都市&#xff0c;近些年对餐饮行业的效率与品质提出了更高要求。中央厨房(央厨)以其规模化、标准化生产的优势&#xff0c;成为提升餐饮供应链效率的关键一环。而央厨配送&#xff0c;作为连接央厨与消费者的重要桥梁&#xff0c;其重要性不言而喻。中腾国际团餐…

HTTPS协议详解:从原理到流程,全面解析安全传输的奥秘

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

uniapp实战教程:如何封装一个可复用的表单组件

在uniapp开发过程中&#xff0c;表单组件的使用场景非常广泛。为了提高开发效率&#xff0c;我们可以将常用的表单组件进行封装。本文将带你了解如何在uniapp中封装一个表单组件&#xff0c;让你只需要通过属性配置轻松实现各种表单&#xff0c;效果图如下&#xff1a; 一、准备…

ZYNQ PS 最小系统

ZYNQ PS 最小系统 ZYNQ 嵌入式开发流程 【正点原子】ZYNQ领航者V2之ARM篇 最小系统框图 最小系统步骤 创建 PS 双击 ZYNQ IP 核&#xff0c;启动配置界面&#xff1a; DDR 配置 小技巧&#xff0c;自动设置列宽&#xff1a; 串口配置 串口原理图&#xff1a; 配置串口引脚&…

sql注入工具升级:自动化时间盲注、布尔盲注

项目地址&#xff1a;https://github.com/iamnotamaster/sql-injecter 给我之前写的sql注入脚本进行了一些升级&#xff0c;此文章就是对升级内容的分析&#xff0c;升级内容如下&#xff1a; 使用占位符foo来填充payload里需要经常修改的部分 自动判断循环 支持爆破和二分查…

六练习题笔记

ps&#xff1a; 所有rpm包安装后的配置文件模板所在目录&#xff1a;/usr/share/doc/ x ### vsftpd有两种工作模式 连接方式&#xff1a; 命令连接&#xff08;命令信道&#xff09;&#xff1a;21 数据连接&#xff08;数据信道&#xff09;&#xff1a;20 和 随…

django的URL配置

1 django如何处理一个请求 首先Django要使用根URLconf模块&#xff0c;通过setting.py配置文件的ROOT_URLCONF来设置。 加载该模块后并查找变量 urlpatterns。这是一个Python的django.conf.urls.url()实例列表。 Django按顺序运行每个URL模式&#xff0c;并在匹配所请求的…