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在工作中的具体使用情况。

目录
相关文章
|
20天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
97 38
|
4月前
|
运维 监控 算法
java实现一个动态监控系统,监控接口请求超时的趋势
java实现一个动态监控系统,监控接口请求超时的趋势
246 2
|
16天前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
10 2
|
20天前
|
Prometheus 监控 Cloud Native
JAVA线程池监控以及动态调整线程池
【10月更文挑战第22天】在 Java 中,线程池的监控和动态调整是非常重要的,它可以帮助我们更好地管理系统资源,提高应用的性能和稳定性。
55 4
|
20天前
|
Prometheus 监控 Cloud Native
在 Java 中,如何使用线程池监控以及动态调整线程池?
【10月更文挑战第22天】线程池的监控和动态调整是一项重要的任务,需要我们结合具体的应用场景和需求,选择合适的方法和策略,以确保线程池始终处于最优状态,提高系统的性能和稳定性。
88 2
|
2月前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
消息中间件 缓存 监控
116 0
|
4月前
|
监控 算法 Java
深入探索Java虚拟机:性能监控与调优实践
在面对日益复杂的企业级应用时,Java虚拟机(JVM)的性能监控和调优显得尤为重要。本文将深入探讨JVM的内部机制,分析常见的性能瓶颈,并提供一系列针对性的调优策略。通过实际案例分析,我们将展示如何运用现代工具对JVM进行监控、诊断及优化,以提升Java应用的性能和稳定性。
|
4月前
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
93 3
|
5月前
|
监控 负载均衡 Java
Java虚拟机调优技巧及性能监控
Java虚拟机调优技巧及性能监控