java性能监控利器Arthas

简介: java性能监控利器Arthas

引言


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


aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTcwNzYwMy8yMDE5MDYvMTcwNzYwMy0yMDE5MDYxNzExMjQ1MjUyNS01MzY3MDY1ODIucG5n.pngaHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTcwNzYwMy8yMDE5MDYvMTcwNzYwMy0yMDE5MDYxNzExMjUwMzU1OS0xMTQ0ODA2NzE5LnBuZw.png


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


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


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


官方网站:


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


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


20191110173424842.png


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


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

20191110173731252.png


二、下载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进程)。


20191110174215387.png


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


四, 常用的一些数据监控


1、整体dashboard数据


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


aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTcwNzYwMy8yMDE5MDYvMTcwNzYwMy0yMDE5MDYxNzExMjY0MzI1OS03NzA1OTkxNDMucG5n.png


2、查看线程监控  


常用参数


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

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

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



image.png

3、jvm监控


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

 image.png


4、函数耗时监控


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

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

解释:


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


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


time是接口的入口函数

image.png

image.png


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


其中getDataFromDb函数耗时200ms


getDataFromRedis函数耗时100ms


getDataFromOuter函数耗时50ms


process函数耗时20ms


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


﹏﹏﹏﹏


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


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


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


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

目录
相关文章
|
3月前
|
运维 监控 算法
java实现一个动态监控系统,监控接口请求超时的趋势
java实现一个动态监控系统,监控接口请求超时的趋势
179 2
|
27天前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
消息中间件 缓存 监控
81 0
|
3月前
|
监控 算法 Java
深入探索Java虚拟机:性能监控与调优实践
在面对日益复杂的企业级应用时,Java虚拟机(JVM)的性能监控和调优显得尤为重要。本文将深入探讨JVM的内部机制,分析常见的性能瓶颈,并提供一系列针对性的调优策略。通过实际案例分析,我们将展示如何运用现代工具对JVM进行监控、诊断及优化,以提升Java应用的性能和稳定性。
|
3月前
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
76 3
|
4月前
|
监控 负载均衡 Java
Java虚拟机调优技巧及性能监控
Java虚拟机调优技巧及性能监控
|
4月前
|
监控 安全 Java
构建Java版监控系统:从入门到精通
构建Java版监控系统:从入门到精通
37 1
|
4月前
|
Arthas 存储 监控
性能监控之常见 Java Heap Dump 方法
【6月更文挑战8天】性能监控之常见 Java Heap Dump 方法
119 7
|
4月前
|
设计模式 监控 安全
屏幕监控软件的设计模式:深入理解Java EE
在Java EE环境中,屏幕监控软件采用生产者-消费者设计模式,`ScreenCaptureProducer`类捕获屏幕数据并放入队列,`ScreenCaptureConsumer`负责处理和提交。数据每5分钟通过定时任务和RESTful API自动提交至网站,提升管理效率。该方案支持实时监控、数据分析和高效的数据处理。
100 2
|
4月前
|
运维 监控 Java
性能监控之 Java Metrics 度量包
【6月更文挑战10天】标题性能监控之 Java Metrics 度量包
86 2