编程语言
首页 > 编程语言> > java动态追踪,线上问题怎么办?Arthas!!!

java动态追踪,线上问题怎么办?Arthas!!!

作者:互联网

场景


java动态追踪

线上问题怎么办?
0 看日志
1 没日志?远程debug
2 线上允许开放debug端口?review看代码
3 终极解决:arthas
 

 

Arthas使用

 

准备工作 启动项目,下载arthas

下载arthas

wget https://arthas.aliyun.com/arthas-boot.jar;

使用

1.启动arthas

wget https://arthas.aliyun.com/arthas-boot.jar;java -jar arthas-boot.jar

2 arthas-bootArthas的启动程序,它启动后,会列出所有的Java进程,用户可以选择需要诊断的目标进程。选择第一个进程,输入 1 ,再Enter/回车

Attach成功之后,会打印Arthas LOGO。输入 help 可以获取到更多的帮助信息。

 

3 通过watch命令可以查看函数的参数/返回值/异常信息。

wath 要监听的方法的reference路径  primeFactors returnObj

watch demo.MathGame primeFactors returnObj

可以jad命令反编译代码

jad demo.MathGame

4 退出Arthas

用 exit 或者 quit 命令可以退出Arthas。

 

案例:排查函数异常

查看UserController的 参数/异常

在Arthas里执行:

watch com.example.demo.arthas.user.UserController * '{params, throwExp}'

第一个参数是类名,支持通配

第二个参数是函数名,支持通配 访问 curl http://localhost:61000/user/0 ,watch命令会打印调用的参数和异常

如果想把获取到的结果展开,可以用-x参数:

watch com.example.demo.arthas.user.UserController * '{params, throwExp}' -x 2

返回值表达式

在上面的例子里,第三个参数是返回值表达式,它实际上是一个ognl表达式,它支持一些内置对象:

你可以利用这些内置对象来组成不同的表达式。比如返回一个数组:

watch com.example.demo.arthas.user.UserController * '{params[0], target, returnObj}'

更多参考: https://arthas.aliyun.com/doc/advice-class.html

watch命令支持-e选项,表示只捕获抛出异常时的请求:

watch com.example.demo.arthas.user.UserController * "{params[0],throwExp}" -e

按照耗时进行过滤

watch命令支持按请求耗时进行过滤,比如:

watch com.example.demo.arthas.user.UserController * '{params, returnObj}' '#cost>200'

练习地址:https://start.aliyun.com/handson/qDlgqpBT/arthas-advanced-cn

标签:java,demo,Arthas,watch,线上,arthas,UserController,com
来源: https://blog.csdn.net/Connie1451/article/details/115405251