1.概述
arthas是Alibaba推出的一款JVM性能诊断调优工具,主要具备以下能力:
- 全局监控,对应用整体情况的一个监控
- JVM的内存情况
- 各个线程的情况
- 运行时的环境信息
- 方法级别的监控,对单个方法进行监控
- watch
- trace
- stack
- monitor
- 线上问题定位,支持对线上问题进行一些排查
2.使用
2.1.安装使用
下载地址:
https://github.com/alibaba/arthas/releases
下载解压后的包结构:
最核心的是arthas的应用jar
2.2.启动
启动要监控的java进程后,再启动arthas。直接通过java -jar arthas-boot.jar可以启动arthas,启动后会列出当前可监控的JAVA进程,选择要监控的进程。
选择好要监控的进程后,接下来就可以通过输入命令的方式来查看具体的监控内容。
2.3.全局监控
dashboard命令,实时展示全局线程情况、内存情况、运行环境信息。
thread命令,可以查看所有线程信息。
thread -id,查看具体线程的信息。
2.4.方法级别的监控
在我们进行调优的时候,先要定位性能问题在何处,直白来说就是往往需要定位到应用内具体的某一个方法。所以对具体方法粒度的监控是很重要,很常用的,arthas提供了一整套对于方法的监控。
方法级别的监控:
- watch
- trace
- stack
- monitor
2.4.1.插件
方法级别的监控命令后面需要跟很多参数,每次都手动输入的话会很慢,可以安装一个idea的插件,用来自动生成带参数的指令,方便高效。
安装arthas idea后选中该右击方法,会有arthas command选项。
2.4.2.watch
watch命令用来查看方法的一些信息,如参数、返回值、异常等,
-n 执行次数
-x每次调用追进去监控的层级深度。
2.3.3.trace
trace命令用来查看方法的耗时,
-n 执行次数
2.3.4.stack
stack命令,查看方法的调用栈,用来确定方法在何处被调用了,
-n 执行次数
2.4.线上问题定位
如果是一个我们已经在实际进行生产使用的一个系统,线上出了问题,根据经验来说我们可以从几个方面去考虑问题:
- 代码的版本是否正确,从而判断是不是代码部署的问题。
- CPU的占用率是否过高,从而判断是不是性能问题
- 是否有死锁,从而判断是不是代码编写的问题。
arthas提供了指令用来支持以上三个维度的问题排查。
2.4.1.反编译
jda -类名,可以反编译类,用来确定当前部署的版本是不是正确的。
2.4.2.CPU占用率
thread -n 根据CPU占用率从高到低例举出指定数量的线程。
2.4.3.死锁
死锁首先在全局监控里可以看到所有状态为BLOCKED的死锁。
也可以通过thread -b指令来查看所有死锁。