大数据&云计算|线上项目出BUG没法调试?推荐这款阿里开源的诊断神器


Arthas是Alibaba开源的Java诊断工具 , 深受开发者喜爱 。 它采用命令行交互模式 , 同时提供丰富的 Tab 自动补全功能 , 进一步方便进行问题的定位和诊断 。
安装
为了还原一个真实的线上环境 , 我们将通过Arthas来对Docker容器中的Java程序进行诊断 。使用arthas-boot , 下载对应jar包 , 下载地址:https://alibaba.github.io/arthas/arthas-boot.jar
将我们的Spring Boot应用mall-tiny-arthas使用Docker容器的方式启动起来 , 打包和运行脚本在项目的srcmaindocker目录下;
将arthas-boot.jar拷贝到我们应用容器的目录下;
docker container cp arthas-boot.jar mall-tiny-arthas:/
进入容器并启动arthas-boot , 直接当做jar包启动即可;
docker exec -it mall-tiny-arthas /bin/bashjava -jar arthas-boot.jar
【大数据&云计算|线上项目出BUG没法调试?推荐这款阿里开源的诊断神器】启动成功后 , 选择当前需要诊断的Java程序的序列号 , 这里是1 , 就可以开始诊断了;
期间会下载一些所需的文件 , 完成后控制台打印信息如下 , 至此Arthas就安装启动完成了 。
大数据&云计算|线上项目出BUG没法调试?推荐这款阿里开源的诊断神器
本文插图

常用命令
我们先来介绍一些Arthas的常用命令 , 会结合实际应用来讲解 , 带大家了解下Arthas的使用 。dashboard
使用dashboard命令可以显示当前系统的实时数据面板 , 包括线程信息、JVM内存信息及JVM运行时参数 。

大数据&云计算|线上项目出BUG没法调试?推荐这款阿里开源的诊断神器
本文插图

thread
查看当前线程信息 , 查看线程的堆栈 , 可以找出当前最占CPU的线程 。
大数据&云计算|线上项目出BUG没法调试?推荐这款阿里开源的诊断神器
本文插图

常用命令:
# 打印当前最忙的3个线程的堆栈信息thread -n 3# 查看ID为1都线程的堆栈信息thread 1# 找出当前阻塞其他线程的线程thread -b# 查看指定状态的线程thread -state WAITING
sysprop
查看当前JVM的系统属性 , 比如当容器时区与宿主机不一致时 , 可以使用如下命令查看时区信息 。
sysprop |grep timezone
user.timezone Asia/Shanghai
sysenv
查看JVM的环境属性 , 比如查看下我们当前启用的是什么环境的Spring Boot配置 。
大数据&云计算|线上项目出BUG没法调试?推荐这款阿里开源的诊断神器
本文插图

logger
使用logger命令可以查看日志信息 , 并改变日志级别 , 这个命令非常有用 。
比如我们在生产环境上一般是不会打印DEBUG级别的日志的 , 当我们在线上排查问题时可以临时开启DEBUG级别的日志 , 帮助我们排查问题 , 下面介绍下如何操作 。
我们的应用默认使用的是INFO级别的日志 , 使用logger命令可以查看;

大数据&云计算|线上项目出BUG没法调试?推荐这款阿里开源的诊断神器
本文插图

使用如下命令改变日志级别为DEBUG , 需要使用-c参数指定类加载器的HASH值;
logger -c 21b8d17c --name ROOT --level debug
再使用logger命令查看 , 发现ROOT级别日志已经更改;
大数据&云计算|线上项目出BUG没法调试?推荐这款阿里开源的诊断神器
本文插图

使用docker logs -f mall-tiny-arthas命令查看容器日志 , 发现已经打印了DEBUG级别的日志;
大数据&云计算|线上项目出BUG没法调试?推荐这款阿里开源的诊断神器


推荐阅读