Arthas 是阿里巴巴开源的 Java 诊断工具,它主要用来对 Java 应用的运行时信息进行监控和跟踪。trace
命令是 Arthas 中非常强大的一个功能,它可以追踪方法的内部调用路径,并输出方法的调用树,同时展示每个方法的调用耗时,非常适用于定位复杂的性能问题。
trace 命令的基本用法
trace <类名> <方法名> [条件表达式]
<类名>
:需要追踪的类名,必须是全限定名。<方法名>
:需要追踪的方法名。[条件表达式]
:可选参数,用于过滤条件,只有满足条件的调用才会被追踪。
示例
假设我们有一个名为com.example.demo.service.UserService
的类,其中有一个createUser
的方法,我们想要追踪这个方法的内部调用路径。
trace com.example.demo.service.UserService createUser
执行上面的命令后,每次UserService
的createUser
方法被调用时,Arthas 都会输出该方法的调用路径和每个调用的耗时。
条件表达式
可以使用条件表达式来进一步过滤追踪的方法调用。例如,只追踪执行时间超过 100 毫秒的方法调用:
trace com.example.demo.service.UserService createUser '#cost > 100'
其中,#cost
是 Arthas 内置的一个变量,表示方法的执行时间(单位为毫秒)。
trace 命令的高级用法
Arthas 的trace
命令还支持很多高级特性,包括但不限于:
--skipJDKMethod
:跳过 JDK 自身的方法调用。-E
:开启正则表达式匹配类名和方法名。-n <次数>
:限制输出的调用树数量。
注意事项
- 在使用
trace
命令时,需要确保目标类已经被加载,否则无法追踪。 trace
命令会增加目标应用的运行负担,尤其是在高并发场景下,因此请在非生产环境或低峰时段使用。- 追踪的结果可能会非常长,尤其是在调用链复杂的情况下,因此需要耐心等待输出结果。
Arthas 的trace
命令是一种强大的动态追踪工具,通过它可以有效地帮助开发者理解应用的运行情况,定位性能瓶颈。在实际使用中,建议结合dashboard
、thread
等其他命令一起使用,以获得更全面的诊断信息。arthas的trace命令