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

目录
相关文章
|
10月前
|
监控 Kubernetes Java
使用 New Relic APM 和 Kubernetes Metrics 监控 EKS 上的 Java 微服务
在阿里云AKS上运行Java微服务常遇性能瓶颈与OOMKilled等问题。本文教你通过New Relic实现集群与JVM双层监控,集成Helm部署、JVM代理注入、GC调优及告警仪表盘,打通从节点资源到应用内存的全链路观测,提升排障效率,保障服务稳定。
683 115
|
存储 监控 算法
企业上网监控场景下布隆过滤器的 Java 算法构建及其性能优化研究
布隆过滤器是一种高效的数据结构,广泛应用于企业上网监控系统中,用于快速判断员工访问的网址是否为违规站点。相比传统哈希表,它具有更低的内存占用和更快的查询速度,支持实时拦截、动态更新和资源压缩,有效提升系统性能并降低成本。
599 0
|
Arthas 存储 监控
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
1057 8
|
存储 机器学习/深度学习 监控
如何监控员工的电脑——基于滑动时间窗口的Java事件聚合算法实现探析​
在企业管理场景中,如何监控员工的电脑操作行为是一个涉及效率与合规性的重要课题。传统方法依赖日志采集或屏幕截图,但数据量庞大且实时性不足。本文提出一种基于滑动时间窗口的事件聚合算法,通过Java语言实现高效、低资源占用的监控逻辑,为如何监控员工的电脑提供一种轻量化解决方案。
557 3
|
Arthas 运维 监控
Arthas monitor(方法执行监控)
Arthas monitor(方法执行监控)
1032 0
|
存储 监控 算法
探秘局域网桌面监控:深入剖析 Java 语言核心算法
在数字化办公时代,局域网桌面监控如同企业的“智慧鹰眼”,确保工作效率与数据安全。本文以Java为载体,揭示哈希表在监控中的关键应用。通过高效的数据结构和算法,哈希表能快速索引设备连接信息,大幅提升监控的时效性和响应速度。代码示例展示了如何用Java实现设备网络连接监控,结合未来技术如AI、大数据,展望更智能的监控体系,助力企业在数字化浪潮中稳健前行。
|
运维 监控 算法
企业局域网监控软件中 Java 优先队列算法的核心优势
企业局域网监控软件是数字化时代企业网络安全与高效运营的基石,犹如一位洞察秋毫的卫士。通过Java实现的优先队列算法,它能依据事件优先级排序,确保关键网络事件如异常流量、数据泄露等被优先处理,保障系统稳定与安全。代码示例展示了如何定义网络事件类并使用PriorityQueue处理高优先级事件,尤其在面对疑似风险时迅速启动应急措施。这一核心技术助力企业在复杂网络环境中稳健前行,护航业务腾飞。
234 32
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
239 2
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
467 38
|
Prometheus 监控 Cloud Native
在 Java 中,如何使用线程池监控以及动态调整线程池?
【10月更文挑战第22天】线程池的监控和动态调整是一项重要的任务,需要我们结合具体的应用场景和需求,选择合适的方法和策略,以确保线程池始终处于最优状态,提高系统的性能和稳定性。
2605 2