Arthas中trace和watch的区别

2024-05-21 17:48:22 浏览数 (1)

trace 命令

trace 命令主要用于监控方法的调用链路以及性能开销。它可以帮助你了解一个方法被调用时,究竟调用了哪些方法,以及每个方法的执行时间。这对于排查性能问题非常有用。

使用场景

  • 想要知道某个方法调用了哪些其他方法。
  • 想要知道这些方法的执行时间,包括总时间、最大时间、最小时间等。

基本用法

代码语言:javascript复制
trace <class-pattern> <method-pattern> [options]

例如:

代码语言:javascript复制
trace com.example.MyClass myMethod

watch 命令

watch 命令则更侧重于观察方法的具体调用情况,包括方法的入参、返回值、抛出的异常等。它可以用来监控方法的执行数据,并且可以指定观察的表达式,从而获取你感兴趣的具体信息。

使用场景

  • 想要知道方法调用时的具体参数是什么。
  • 想要知道方法的返回值或者抛出的异常。
  • 想要在方法执行前后监控特定变量的值。

基本用法

代码语言:javascript复制
watch <class-pattern> <method-pattern> <expression> [options]

例如:

代码语言:javascript复制
watch com.example.MyClass myMethod '{params, returnObj}' 

trace 与 watch 的区别

  • 监控深度trace 用于监控方法调用的深度,包括调用了哪些方法以及每个方法的执行时间;而 watch 用于监控方法的具体执行细节,如参数、返回值等。
  • 用途trace 更适合于排查性能问题,通过观察方法的调用链路和耗时来定位可能的性能瓶颈;watch 更适合于排查逻辑问题,通过观察方法的执行状态来理解程序的行为。
  • 输出信息trace 输出的是方法调用的堆栈信息和时间消耗;watch 输出的是用户指定表达式的值,可以是参数、返回值、异常等。

在实际使用中,根据问题的具体情况选择合适的命令是非常重要的。有时候,两者也可以结合使用,比如先用 trace 定位到有问题的方法调用,然后再用 watch 来深入观察该方法的具体执行状态。

trace案例截图:

watch案例截图:

0 人点赞