arthas学习笔记
# 是什么
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
# 为什么
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
1:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
2:我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
3:遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
4:线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
5:是否有一个全局视角来查看系统的运行状况?
6:有什么办法可以监控到JVM的实时运行状态?
7:怎么快速定位应用的热点,生成火焰图?
8:Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
# 怎么用
## 下载
教程外部链接:[https://arthas.aliyun.com/doc/profiler.html]((https://arthas.aliyun.com/doc/profiler.html))
```
cd /Users/blake //选个下载到的地方
curl -O https://arthas.aliyun.com/arthas-boot.jar //下载
```
## 使用
```
java -jar arthas-boot.jar //运行
```
**运行完后会让你选想要监听的java程序,确定想要监控的java程序的pid,输入前边的序号按回车。**
**出现下边这个图代表启动成功,输入命令以进行后续操作。**
arthas支持浏览器访问,也可以远程连接其它机器上运行的arthas,用户在attach成功之后,可以直接访问:http://127.0.0.1:3658/。
## 一些常用的命令
### 1:dashboard
查看当前系统的实时数据面板
### 2:trace
查看指定方法内部的调用路径,并展示对应的调用时间,方便用来优化执行时间。

### 3:jad
反编译指定类或者方法的代码,可以看当前在服务器上真正在执行的代码,排查是不是没提交或者是没改、没部署之类的问题。

### 4: watch
查看指定方法的入参、返回值,有四个维度可以查看,方法调用前、方法返回后、方法异常后、方法结束后(正常异常都算),通过命令的参数来使用。
**查询方法入参**
**查询方法返回值**(有时返回对象层级比较深,就需要更改-x参数的值,即属性遍历深度)
watch com.douyu.bj.audiosocial.pkmatch.common.service.impl.PkmatchApiServiceImpl getTimeConfig "{params,returnObj}" -x 2
### 5:thread
查看线程以及对应堆栈信息,支持查找最忙的线程、死锁的线程等
**展示前三最忙的线程以及自己的堆栈**

### 6:logger
查看日志的信息或者更新日志相关设置。
**先查看当前的日志信息,然后将日志等级改为debug,更改成功!**
**arthas的热修复也是类似原理,可以直接替换服务器上的class文件并重新编译来达成免重新发布的热修复的目的。**
### 7: profiler
**跟踪某事件,并生成它的火焰图,默认是cpu,以此来判断系统中的热点事件。结束后能生成svga文件到指定路径以便查看**


### 8: sc查看加载类的信息

## 常见适用场景
### 1:热更新
1:jad反编译指定类
2:编辑文件,mc命令编译成class文件(或在线下编译好将文件放到服务器上)
3:redefine或retransform重新加载class文件
4:验证是否更改成功
### 2:CPU使用高
1:先用top命令看进程占用


2:使用arthas定位到java服务对应进程

3:使用dashboard或thread查看线程情况

4:thread查看指定线程栈信息

### 3 :内存占用高、OOM
1:heapdump将堆信息写到hprof文件中

2:用jvisualvm分析dump文件



### 4:分析链路
trace

浙公网安备 33010602011771号