Arthas到底是什么
Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,提供了丰富的功能,是排查jvm相关问题的利器。
下面先列举一下它能做的一些事情:
- 提供性能看板,包括线程、cpu、内存等信息,并且会定时的刷新。
- 根据各种条件查看线程快照。比如找出cpu占用率最高的n个线程等
- 输出jvm的各种信息,如gc算法、jdk版本、ClassPath等
- 查看/设置sysprop和sysenv
- 查看某个类的静态属性,也可以通过ognl语法执行一些语句
- 查看已加载的类的详细信息,比如这个类从哪个jar包加载的。也可以查看类的方法的信息
- dump某个类的字节码到指定目录
- 直接反编译指定的类
- 查看类加载器的一些信息
- 可以让jvm重新加载某个类
- 监控方法的执行,同时可以获取到执行的入参、出参以及抛出的异常
- 追踪方法执行的调用栈,以及各个方法的调用时间
安装arthas
#下载:
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
#启动:
java -jar arthas-boot.jar
# 使用阿里云maven仓库拉取
java -jar arthas-boot.jar --repo-mirror aliyun --use-http
使用trace命令对可疑方法进行耗时分析
trace cn.xxxx.service.platform.authority.filter.AuthenticationFilter doFilterInternal
发现是 `javax.servlet.FilterChain:doFilter 耗时时间过长
使用trace命令对可疑方法再次进行分析
trace javax.servlet.FilterChain doFilter
发现图中的baidu openrasp方法耗时过长,怀疑是rasp问题
通过去掉java启动参数中的-javaagent:rasp.jar