java性能监控利器Arthas

引言

性能调优是一个非常复杂,技术含量很高的高作,涉及到的知识面很广,而性能调优的第一步工作就是发现问题和定位问题,确定性能问题出现在那一部分,需要定位到具体的函数,类,SQL,某些参数的配置等等。那么我们在实际工作中怎么定位问题呢?肯定不能靠猜测和想象,尤其是我们线上出现了一些不是很容易复现的性能问题时。比较专业的开发人员肯定是会借助一些工具,以JAVA语言来说,如jdk自带的jvisualvm等免费工具,以及商业化工具Jprofiler。

java性能监控利器Arthas_第1张图片

java性能监控利器Arthas_第2张图片

这两款工具在业界知名度也比较高,他们的优点是可以图形界面上看到各维度的性能数据,使用者根据这些数据进行综合分析,然后判断哪里出现了性能问题。

但是这两款工具也有个缺点,都必须在服务端项目进程中配置相关的监控参数。然后工具通过远程连接到项目进程,获取相关的数据。这样就会带来一些不便,比如线上环境的网络是隔离的,本地的监控工具根本连不上线上环境。并且类似于jprofiler这样的商业工具,是需要付费的。

今天跟大家介绍一款阿里巴巴开源的性能分析神器Arthas(阿尔萨斯)

官方网站:

https://alibaba.github.io/arthas/index.html

Arthas能为你做什么事情呢?我们先来看一下官网的介绍

               java性能监控利器Arthas_第3张图片

接下来我们找个真实的项目来实际体验一下Arthas.

一、在linux服务器上基于tomcat部署javaweb项目。

二、下载Arthas工具

我们可以直接在linux服务器上通过命令下载

wget https://alibaba.github.io/arthas/arthas-boot.jar

也可以在浏览器直接访问https://alibaba.github.io/arthas/arthas-boot.jar,等待下载成功后,上传到Linux服务器上。

三、启动Arthas工具

这里需要注意:执行该程序的用户需要和目标进程具有相同的权限。比如以admin用户来执行:sudo su admin && java -jar arthas-boot.jar 或 sudo -u admin -EH java -jar arthas-boot.jar

我启动的项目是通过daemon用户启动,所以我们启动的命令如下:

/sbin/runuser -s /bin/bash daemon -c "java -jar arthas-boot.jar"
相信开始搞性能调优的读者们, 肯定对上面的启动命令很熟悉。

执行成功后,arthas提供了一种命令行方式的交互方式,arthas会检测当前服务器上的Java进程,并将进程列表展示出来,用户输入对应的编号(1、2、3、4…)进行选择,然后回车(见红色框,进程[1]就是tomcat进程)。

java性能监控利器Arthas_第4张图片

arthas提供了很多的命令,用来我们监控想要的性能指标。

四, 常用的一些数据监控

1、整体dashboard数据

在arthas的命令行界面,输入dashboard,会实时展示当前tomcat的多线程状态、Jvm各区域、GC情况等信息

java性能监控利器Arthas_第5张图片

2、查看线程监控 

常用参数

输入thread会显示所有线程的状态信息

输入thread -n 3会显示当前最忙的3个线程,可以用来排查线程CPU消耗

输入thread -b 会显示当前处于BLOCKED状态的线程,可以排查线程锁的问题

java性能监控利器Arthas_第6张图片

3、jvm监控

输入jvm,查看jvm详细的性能数据

 java性能监控利器Arthas_第7张图片

4、函数耗时监控

通常说一个接口性能不好,其实就是接口响应时间比较长造成的,具体代码中哪个函数耗时比较长呢?可以使用trace功能来监控一下

trace -jcn.testfan.perf.beihe.pinter.http.CaseController time

解释:

-j参数可以过滤掉jdk自身的函数

cn.testfan.perf.beihe.pinter.http.CaseController是接口所在的类

time是接口的入口函数

java性能监控利器Arthas_第8张图片

java性能监控利器Arthas_第9张图片

通过圈起来的部分可以看到,接口的入口函数time总耗时371ms

其中getDataFromDb函数耗时200ms

getDataFromRedis函数耗时100ms

getDataFromOuter函数耗时50ms

process函数耗时20ms

很明显,最慢的函数已经找到了,接下里就要去对代码进行进一步分析,然后再进行优化。

﹏﹏﹏﹏

上述几个命令只是性能测工作中常用的一些操作,Arthas还有很多其他维度的监控数据,大家可以去官网看下用户手册学习更多操作。

最后arthas还整理了用户在真实环境中遇到的问题及解决思路:

https://github.com/alibaba/arthas/issues?q=label%3Auser-case

后续会继续更新arthas在工作中的具体使用情况。

你可能感兴趣的:(性能调优,@JAVA学习,arthas,java,性能调优)