tt
命令是 Arthas 的“时间隧道”功能,它可以记录指定方法的调用情况,并允许你对这些调用进行回放、查询和分析。这个功能非常强大,因为它能够帮助你理解过去发生的方法调用情况,这对于复现和定位历史问题非常有用。
tt 命令的基本用法
tt -t <类名> <方法名> [条件表达式] [选项]
-t
:指定记录目标方法的调用,不加-t
时默认是查看已经记录的信息。<类名>
:需要记录的类名,必须是全限定名。<方法名>
:需要记录的方法名。[条件表达式]
:可选参数,用于过滤条件,只有满足条件的调用才会被记录。[选项]
:其他可选项,包括设置采样率、限制记录的数量等。
tt 命令的常见选项
-n <次数>
:限制记录的调用次数。-s
:成功执行的方法调用。-e
:抛出异常的方法调用。-b
:在方法执行之前记录。-a
:在方法执行之后记录。
示例
假设我们有一个名为 com.example.demo.service.UserService
的类,其中有一个 createUser
的方法,我们想要记录这个方法的调用情况。
tt -t com.example.demo.service.UserService createUser
执行上面的命令后,每次 UserService
的 createUser
方法被调用时,Arthas 都会记录该方法的调用信息。
查看和操作记录的调用
tt
命令还有一些子命令来查看和操作已经记录的信息:
tt -l
:列出所有记录的调用。tt -i <记录编号>
:查看指定记录编号的详细信息,包括方法参数、返回值或异常信息。tt -p <记录编号>
:回放指定编号的调用,这可以触发方法执行,并且使用当时的参数。tt -w <条件表达式>
:根据条件表达式查询记录的调用。tt -d <记录编号>
:删除指定编号的调用记录。
注意事项
- 使用
tt
命令记录信息时,会消耗额外的内存和 CPU 资源,因此在生产环境中要谨慎使用。 tt
记录的信息默认存储在内存中,重启应用后会丢失,如果需要持久化保存,可以考虑将信息导出。tt
命令可以指定多个条件,通过组合使用可以精确地过滤和查找需要的调用记录。
tt
是 Arthas 中一个非常强大的诊断命令,它提供了一种方法来记录和分析过去的方法调用,对于理解系统的运行行为和定位问题非常有帮助。在使用时,建议结合实际的业务场景和问题特点来选择合适的记录和查询策略。
在 Arthas 的 tt
命令中,“记录编号”是一个唯一的标识符,它用于标识每一次被 tt
命令记录的方法调用。当你使用 tt
命令记录方法调用时,Arthas 会为每一次调用分配一个独特的编号,这个编号是一个自增的整数。
通过这个记录编号,你可以对特定的方法调用执行以下操作:
- 查看调用的详细信息(包括输入参数、返回值、异常信息等)。
- 回放某次调用(重新执行记录下来的方法调用)。
- 删除某次调用的记录。
如何获取记录编号
当你执行 tt -t <类名> <方法名>
命令后,Arthas 开始记录指定方法的调用。你可以通过执行 tt -l
命令来列出所有记录的调用信息,每条记录前面都会显示一个编号,这就是记录编号。
示例
以下是一个使用 tt -l
列出记录并显示记录编号的示例:
$ tt -l
INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD
-----------------------------------------------------------------------------------------------------------------
1000 2021-08-05 14:25:40 35 true false 0x5e9183 com.example.demo.service.UserService createUser
1001 2021-08-05 14:25:42 12 true false 0x5e9184 com.example.demo.service.UserService createUser
在这个例子中,1000
和 1001
就是记录编号,用于标识 createUser
方法的两次不同调用。
如何使用记录编号
你可以使用记录编号来进行进一步的操作,例如:
- 查看编号为 1000 的记录详细信息:
tt -i 1000
- 回放编号为 1001 的记录:
tt -p 1001
- 删除编号为 1000 的记录:
tt -d 1000
使用记录编号可以精确地操作和分析特定的方法调用,这对于诊断复杂的问题非常有帮助。在实际使用中,你需要根据自己的诊断需求来选择合适的操作。