文章目录
- 在线诊断工具-arthas 介绍
- 简介
- arthas 使用
- 快速开始
- 使用`arthas-boot`(推荐)
- 使用`as.sh`
- 常用命令
- 文档
- 应用案例
- 检查死锁
- 检查代码是否丢失
- 接口性能排查
- 使用Arthas分析步骤
- 生产环境排查 CPU 飚高问题
- CPU 超负载告警,执行TOP命令查看PID
- 开启 Arthas 工具找到对应的 模块,选择运单模块进入:
- 执行 dashboard 命令,查看占用高的不正常线程
- 执行 thread 66 thread 88 定位代码行
- 查看代码
- 总结
在线诊断工具-arthas 介绍
简介
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
1.这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
2.我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
3.遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
4.线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
5.是否有一个全局视角来查看系统的运行状况?
6.有什么办法可以监控到JVM的实时运行状态?
7.怎么快速定位应用的热点,生成火焰图?
8.怎样直接从JVM内查找某个类的实例?
Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
arthas 使用
快速开始
使用arthas-boot
(推荐)
下载arthas-boot.jar
,然后用java -jar
的方式启动:
widows 新建一个arthas 目录然后 cmd 打开命令行,执行以下命令:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
*** 启动之前确保有一个 java进程服务,然后再启动你的arthas。
打印帮助信息:
java -jar arthas-boot.jar -h
- 如果下载速度比较慢,可以使用aliyun的镜像:
java -jar arthas-boot.jar --repo-mirror aliyun --use-http
使用as.sh
Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 回车
执行即可:
curl -L https://arthas.aliyun.com/install.sh | sh
上述命令会下载启动脚本文件 as.sh
到当前目录,你可以放在任何地方或将其加入到 $PATH
中。
直接在shell下面执行./as.sh
,就会进入交互界面。
也可以执行./as.sh -h
来获取更多参数信息。
常用命令
启动成功之后,可以执行命令。
dashboard : 类图向界面,用于观察每个线程及所占的CPU。
thread : 查看那些进程占用CPU。
jmap -histo 进程号:查看那些进程占内存。
jmap -histo 进程号 | head -20 :查看那些进程占内存,获取前20行。
应用案例
检查死锁
thread -b
检查代码是否丢失
往常的做法我们会先把在运行的jar包下载下来解压在找到相应的类文件查看代码是否丢失。
使用Arthas 我们可以在本地使用阿里的插件使用:jad 例如: jad cn.vv.oa.module.workflow.controller.WorkflowApplyController 反编译查看源码。
接口性能排查
GMS在预发发现获取流程详情的接口访问很慢,但是在本地,开发,测试其实无法复现。后面是使用arthas 的trace命令排查出的。
trace cn.vv.oa.module.workflow.controller.MyProcessController getMyProcessDetail
使用Arthas分析步骤
生产环境排查 CPU 飚高问题
CPU 超负载告警,执行TOP命令查看PID
开启 Arthas 工具找到对应的 模块,选择运单模块进入:
java -jar arthas-boot.jar
执行 dashboard 命令,查看占用高的不正常线程
比如线程66,,88占比高
执行 thread 66 thread 88 定位代码行
查看代码
thread 35
thread 12042
总结
arthas 能解决很多远程调试和排错的问题,但是不是万能的,配合日志/remote等其他工具,在不同的环境适当使用才能发挥它的作用。