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

news2024/12/27 13:36:15

在这里插入图片描述

文章目录

  • 二、命令列表
    • 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: 6
 INDEX         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 -l
 INDEX         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 1001
 INDEX          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 -p
 RE-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 自己的内部线程发起的调用了。

本人其他相关文章链接

1.Arthas 全攻略:让调试变得简单
2.Arthas dashboard(当前系统的实时数据面板)
3.Arthas thread(查看当前JVM的线程堆栈信息)
4.Arthas jvm(查看当前JVM的信息)
5.Arthas sysprop(查看和修改JVM的系统属性)
6.Arthas sysenv(查看JVM的环境变量)
7.Arthas vmoption(查看和修改 JVM里诊断相关的option)
8.Arthas getstatic(查看类的静态属性 )
9.Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
10.Arthas logger(查看 logger 信息,更新 logger level)
11.Arthas mbean(查看 Mbean 的信息)
12.Arthas memory(查看 JVM 内存信息)
13.Arthas ognl(执行ognl表达式)
14.Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)
15.Arthas vmtool(从 jvm 里查询对象,执行 forceGc)
16.Arthas jad(字节码文件反编译成源代码 )
17.Arthas mc(Memory Compiler/内存编译器 )
18.Arthas redefine(加载外部的.class文件,redefine到JVM里 )
19.Arthas classloader (查看 classloader 的继承树,urls,类加载信息)
20.Arthas sc(查看JVM已加载的类信息 )
21.Arthas sm(查看已加载类的方法信息 )
22.Arthas monitor(方法执行监控)
23.Arthas stack (输出当前方法被调用的调用路径)
24.Arthas trace (方法内部调用路径,并输出方法路径上的每个节点上耗时)
25.Arthas tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测)
26.Arthas watch (方法执行数据观测)
27.Arthas profiler(使用async-profiler对应用采样,生成火焰图)

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

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

相关文章

Apriori算法介绍(Python实现)

1.Apriori算法简介 Apriori算法是经典的挖掘频繁项集和关联规则的数据挖掘算法。A priori在拉丁语中指"来自以前"。当定义问题时&#xff0c;通常会使用先验知识或者假设&#xff0c;这被称作"一个先验"&#xff08;a priori&#xff09;。Apriori算法的名…

数据结构 ——— 顺序表oj题:编写函数,删除有序数组中的重复项

目录 题目要求 代码实现 题目要求 一个升序排列的数组 nums &#xff0c;要求原地删除重复出现的元素&#xff0c;使每个元素只出现一次&#xff0c;并返回删除后数组的新长度&#xff0c;元素的相对顺序应该保持一致 代码实现 代码演示&#xff1a; int removeDuplicate…

Unity3D 创建一个人物,实现人物的移动

1&#xff0c;创建项目 首先打开我们的Unity Hub 在我们的编译器下面新建项目&#xff0c;选择3D模板&#xff0c;更改一下我们的项目名称&#xff0c;选择一下路径&#xff0c;然后点击创建项目 等待项目创建。。。。。。 我们在项目里先创建一个plane&#xff0c;这样有点视…

大数据处理从零开始————8.基于Java构建WordCount项目

1.配置项目环境 1.1 配置ide工具 下载IntelliJ IDEA。 Download IntelliJ IDEA – The Leading Java and Kotlin IDE (jetbrains.com.cn) 全部下一步&#xff0c;中途遇到需要勾选的全部勾选即可。 安装可以参考下面文章&#xff1a; 【附安装包】IDEA下载、安装、配置与使用&…

Chris,36岁勇辞管理,重回开发:一场高龄远程工作者有违常理的自我追寻。

这是《开发者说》的第18期&#xff0c;本期我们邀请的优秀远程开发者是Chris&#xff0c;同时他也是位知名博主&#xff1a;高龄程序员。 36岁&#xff0c;从世人艳羡的高管回到开发。诧异、不解、质疑……充斥不绝。是自绝后路&#xff0c;还是东山再起&#xff1f; 07年本科…

RocksDB Compaction的常见问题

1 概述 TiKV 底层存储引擎使用 RocksDB &#xff0c;RocksDB 是一个基于 LSM tree 的单机嵌入式数据库&#xff0c; 对于LSM Tree 来说compaction是个非常重要的操作&#xff0c;本文对TiKV中涉及的compaction相关内容进行了整理总结。 2 为什么需要 compaction ? LSM Tree 通…

Oracle数据恢复—异常断电导致Oracle数据库报错的数据恢复案例

Oracle数据库故障&#xff1a; 机房异常断电后&#xff0c;Oracle数据库启库报错&#xff1a;“system01.dbf需要更多的恢复来保持一致性&#xff0c;数据库无法打开”。数据库没有备份&#xff0c;归档日志不连续。用户方提供了Oracle数据库的在线文件&#xff0c;需要恢复zxf…

嵌入式linux系统中库函数如何提高效率

工作中总是会用到各种库,比如本地使用静态库,下载源上的动态库;面试时也会经常性的问到,下面我做了一系列的总结,希望大家可以快速掌握各种库,以及库的制作和使用。 一、什么是库及其作用 库(英文为library)是一组预先编写好的代码、函数、类和其他程序组件的集合…

“迷雾深渊”炮击图设计

python尝试C题目&#xff0c;ai查错审码还写“代码解读”和学习总结。 (笔记模板由python脚本于2024年09月29日 10:51:58创建&#xff0c;本篇笔记适合喜欢python&#xff0c;鼓捣算法的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/…

OpenWrt学习(四)

分区、外网、OPKG 了解分区 在Linux系统中对闪存类存储器是采用MTD(内存技术设备)类设备驱动实现的,MTD是用于访问内存类设备(ROM、Flash)的Linux驱动子系统。它的主要目的是使Flash闪存类设备更容易被访问,为此它在硬件和上层提供了一个抽象的接口使得在操作系统下我们…

基于 ESP-AT 固件从外部服务器获取文件,使用分段续传的方式

**可使用 ATHTTPCGET 指令获取 HTTP\HTTPS 的资源&#xff0c;将返回资源的 Size 和 Data ** AT 指令序列如下&#xff1a; ATRESTOREATCWMODE1 //设置 WiFi Station 模式ATCWJAP"cc2.4","12345678" //连接 WiFi ATHTTPCHEAD…

前端 vue3 对接科大讯飞的语音在线合成API

主要的功能就是将文本转为语音&#xff0c;可以播放。 看了看官方提供的demo&#xff0c;嗯....没看懂。最后还是去网上找的。 网上提供的案例&#xff0c;很多都是有局限性的&#xff0c;我找的那个他只能读取第一段数据&#xff0c;剩下的不读取。 科大讯飞的接口&#xf…

中国一定赞!北京华联BHGMall献礼祖国75周年华诞,创新践行促消费体验再升级

北京华联BHGMall [华联股份(000882)] 作为零售行业核心力量&#xff0c;以广大消费者为核心&#xff0c;不断提升自身竞争力、优化服务、以实惠的价格优质的品牌组合创新的营销活动&#xff0c;带来全新的购物消费体验。 让利于民&#xff0c;以缤纷活动点燃国庆热烈氛围 金秋…

OpenAI创始成员Andrej Karpathy:这才是技术之美

来源 | 机器之心 技术应该是什么样子&#xff1f; 我们知道乔布斯有「为改变混乱繁杂而生的现代简约主义」的设计理念。所以苹果提供的科技产品都是简洁的。可斯人已逝&#xff0c;如今我们身边的科技产品似乎又进入了复杂与不实用的怪圈之中。 近日&#xff0c;知名 AI 领域学…

【教程】57帧! Mac电脑流畅运行黑神话悟空

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 1、先安装CrossOver。网上有许多和谐版&#xff0c;可自行搜索。&#xff08;pd虚拟机里运行黑神话估计够呛的&#xff09; 2、运行CrossOver&#xf…

VMware ESXi 8.0U3b macOS Unlocker OEM BIOS 2.7 Dell HPE 定制版 9 月更新发布

VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 Dell HPE 定制版 9 月更新发布 VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版 ESXi 8.0U3 标准版&#xff0c;Dell (戴尔)、HPE (慧与)、Lenovo (联想)、IEIT SYSTEMS (浪潮信息)、Cisco …

在使用表格识别工具时,如何确保识别的准确性?

在使用表格识别工具时&#xff0c;确保识别准确性的关键在于以下几个方面&#xff1a; 1.图像质量&#xff1a;确保扫描或拍摄的图像清晰&#xff0c;无遮挡、无反光、无阴影&#xff0c;并且文字清晰可辨 。 2.预处理图像&#xff1a;在图像送入OCR识别之前&#xff0c;进行…

Linux —— Socket编程(三)

一、本章重点 1. tcp服务器实现思路&#xff0c;进一步了解和总结相关的接口 2. 了解日志和守护进程 二、tcp服务器核心思路 tcp版的服务器与udp的不同在于&#xff0c;udp是面向数据报传输数据&#xff0c;在数据传输中不需要建立与客户端的链接&#xff0c;直接用recvfrom…

GEE数据集:1996 年到 2020 年全球红树林观测数据集(JAXA)(更新)

目录 简介 数据集说明 数据集 代码 代码链接 结果 引用 许可 网址推荐 0代码在线构建地图应用 机器学习 简介 全球红树林观测 这项研究使用了日本宇宙航空研究开发机构&#xff08;JAXA&#xff09;提供的 L 波段合成孔径雷达&#xff08;SAR&#xff09;全球mask…

银河麒麟服务器:更新软件源

银河麒麟服务器&#xff1a;更新软件源 1、使用场景2、操作步骤3、注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 1、使用场景 当需要安装最新软件或修改软件源配置后&#xff0c;需更新软件源以获取最新软件包信息。 2、操作步…