Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
参考官方文档:https://arthas.aliyun.com/doc/install-detail.html
设置Docker容器权限
这一步很重要,如果docker容器没有相应的权限,在执行Arthas的一些命令时会报错:
AsyncProfiler error: No access to perf events. Try --fdtransfer or --all-user option or ‘sysctl kernel.perf_event_paranoid=1’
设置方法
这个设置方法有很多,还和你启动容器的方式有关,可以自行百度,我的容器是通过docker-compose.yml进行配置并启动的,配置如下:
version: "3.7"
services:
datain-backend:
image: xxxx:version
privileged: true
ports:
- 8080:8080
启动容器并获取容器ID
启动容器
docker-compose up -d
获取容器ID
docker ps
进入容器
docker exec -it 容器ID /bin/bash
这个Arthas 是个Jar你可以根据官方文档的方法下载,也可以在其它地方下载好上传到宿主服务器,再通过挂载目录的方式将文件弄到docker容器,当然最简单的还是直接下载:
curl -O https://arthas.aliyun.com/arthas-boot.jar
启动
java -jar arthas-boot.jar
选择对应的Java 服务
启动后,会给你列出你容器中的java 服务,你可以输入对应的数字来选择
# 在执行分析的时候最好对相应的接口进行压测一下,或者自己手动多调用一下,因为他是靠统计时间点的访问次数来分析的
## 启动打点
profiler start
## 过一会儿,停止
profiler stop
## 停止后会自动生成火焰图到你的容器根目录,是个html,你自己想办法弄到本地来,通过浏览器打开
● 火焰图分析:这个我建议可以去网上看看文章,很容易学会的
从下到上是方法入栈的顺序,你可以找到你要分析的方法,看看他的时间分布,横向的长短代表耗时比例
# 使用trace命令, 监听com.xxx.server.XXXImpl类 的listTable方法
trace com.xxx.server.XXXImpl listTable
结果分析:每一步都统计的耗时,根据耗时情况进行优化就好了