今天线上有个接口一直响应 500,但是具体异常却在日志中没有查看到异常信息。于是通过 Arthas 来查看(最终结论:使用 watch 命令看)。
首先 trace 一下异常方法:
# 号后面就是行号,要注意这里 trace 是分层了的,我这里第一层是 XXXController,这里的 #45、#48 等对应的就是在 XXXController 中的行数,然后直到 XXXController 的第 59 行,这个 listXXX 方法内抛出了一个 NPE 异常。
但是 Arthas 中的 trace 命令只能展示一层,可以通过"trace -E com.test.ClassA|org.test.ClassB method1|method2|method3" 的方式查看多个函数,但其实还是不太明显:
换成使用 watch 命令:
[arthas@1]$ watch com.xxx.web.controller.XXXXController xxxMethod {params,returnObj,throwExp} -e -x 6
这个效果就不错,可以看到行数。