文章目录

  • 在线诊断工具-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等其他工具,在不同的环境适当使用才能发挥它的作用。