今天跟大家介绍一款阿里巴巴开源的性能分析神器 Arthas(阿尔萨斯)
官方网站:https://alibaba.github.io/arthas/index.html
Arthas 能为你做什么事情呢?我们先来看一下官网的介绍。
当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:
1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
5. 是否有一个全局视角来查看系统的运行状况?
6. 有什么办法可以监控到 JVM 的实时运行状态?
Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同时提供丰富的 Tab 自
动补全功能,进一步方便进行问题的定位和诊断。
接下来,我们找个项目实际体验一下 Arthas一、Linux 上启动被监控的项目
先来看下 Linux 服务端部署的项目,一个 JavaWeb 项目,基于 tomcat 部署,服务端 tomcat
启动后,通过浏览器访问项目首页,验证项目是否可以正常访问。
二、下载 arthas 工具
可以直接在 Linux 上通过命令下载wget https://alibaba.github.io/arthas/arthas-boot.jar
也可以在浏览器直接访问 https://alibaba.github.io/arthas/arthas-boot.jar,等待下载成功
后,上传到 Linux 服务器上。
三、启动 arthas 工具(需要配置好 jdk)
执行命令: java -jar arthas-boot.jar
执行成功后,arthas 提供了一种命令行方式的交互方式,arthas 会检测当前服务器上的
Java 进程,并将进程列表展示出来,用户输入对应的编号(1、2、3、4…)进行选择,然
后回车(见红色框,进程[1]就是 tomcat 进程)。
第一次使用 arthas 需要自动下载一些依赖包,等待下载完成,就会进入到 arthas 提供的命令行界面。
四、常用的一些监控数据1、整体 dashboard 数据
在 arthas 的命令行界面,输入 dashboard,会实时展示当前 tomcat 的多线程状态、Jvm 各
区域、GC 情况等信息
2、查看线程监控
常用参数
输入 thread 会显示所有线程的状态信息
输入 thread -n 3 会显示当前最忙的 3 个线程,可以用来排查线程 CPU 消耗
输入 thread -b 会显示当前处于 BLOCKED 状态的线程,可以排查线程锁的问题
3、jvm 监控
输入 jvm,查看 jvm 详细的性能数据
4、函数耗时监控
通常说一个接口性能不好,其实就是接口响应时间比较长造成的,具体代码中哪个函数耗时
比较长呢?可以使用 trace 功能来监控一下
trace 类名 函数
trace cn.testfan.perf.beihe.pinter.http.CaseController time
解释:
cn.testfan.perf.beihe.pinter.http.CaseController 是接口所在的类
time 是接口的入口函数
通过圈起来的部分可以看到,接口的入口函数 time 总耗时 371ms
其中 getDataFromDb 函数耗时 200ms
getDataFromRedis 函数耗时 100ms
getDataFromOuter 函数耗时 50ms
process 函数耗时 20ms
很明显,最慢的函数已经找到了,接下里就要去对代码进行进一步分析,然后再进行优化。
上述几个命令只是性能测工作中常用的一些操作,Arthas 还有很多其他维度的监控数据,大
家可以去官网看下用户手册学习更多操作。