阿里巴巴开源性能监控神器Arthas jvm
原文:https://www.cnblogs.com/testfan2019/p/11038791.html
如果问性能测试中最难的是哪部分,相信很多人会说“性能调优”。确实是这样,性能调优是一个非常复杂、技术含量很高的工作。涉及到的知识面很广。以我多年从业经验来看,在企业里,大多数的性能调优都是由开发架构师来完成,涉及到数据库的,可能需要DBA的介入。
而性能测试工程师在实际工作中,主要的职责是发现问题和定位问题,确定性能问题出现在哪部分,需要定位到具体函数、类、SQL,某些参数配置、某些硬件限制等。如果能做到这一点,那就是一个很称职的性能测试工程师了。
那么如何去定位问题呢?不能靠猜测和想象,这个时候需要借助一些专业的工具来协助,以JAVA语言来说,如jdk自带的jvisualvm等免费工具,以及商业化工具Jprofiler。


这两款工具在业界知名度也比较高,他们的优点是可以图形界面上看到各维度的性能数据,使用者根据这些数据进行综合分析,然后判断哪里出现了性能问题。
但是这两款工具也有个缺点,都必须在服务端项目进程中配置相关的监控参数。然后工具通过远程连接到项目进程,获取相关的数据。这样就会带来一些不便,比如线上环境的网络是隔离的,本地的监控工具根本连不上线上环境。并且类似于jprofiler这样的商业工具,是需要付费的(可以破解,但是希望大家支持正版)
那么有没有一款工具不需要远程连接,也不需要配置监控参数,同时也提供了丰富的性能监控数据呢?
今天跟大家介绍一款阿里巴巴开源的性能分析神器Arthas(阿尔萨斯)
官方网站:
https://alibaba.github.io/arthas/index.html
Arthas能为你做什么事情呢?我们先来看一下官网的介绍。

接下来,我们找个项目实际体验一下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 -jcn.testfan.perf.beihe.pinter.http.CaseController time
解释:
-j参数可以过滤掉jdk自身的函数
cn.testfan.perf.beihe.pinter.http.CaseController是接口所在的类
time是接口的入口函数

通过圈起来的部分可以看到,接口的入口函数time总耗时371ms
其中getDataFromDb函数耗时200ms
getDataFromRedis函数耗时100ms
getDataFromOuter函数耗时50ms
process函数耗时20ms
很明显,最慢的函数已经找到了,接下里就要去对代码进行进一步分析,然后再进行优化。
﹏﹏﹏﹏
上述几个命令只是性能测工作中常用的一些操作,Arthas还有很多其他维度的监控数据,大家可以去官网看下用户手册学习更多操作。
通过对Arthas的初步使用可以看到,Arthas是一个功能非常强大的性能监控工具,而且使用非常方便,不需要做任何的参数配置,就可以直观的获取各种维度的性能数据。但是拿到这些原始监控数据后,你可能会发现再强大的监控工具也只能提供一些数据,具体问题还是靠人来进行分析,而这点才是最关键的。
阿里巴巴开源性能监控神器Arthas jvm的更多相关文章
- 阿里巴巴开源性能监控神器Arthas初体验
如果问性能测试中最难的是哪部分,相信很多人会说“性能调优”.确实是这样,性能调优是一个非常复杂.技术含量很高的工作.涉及到的知识面很广.以我多年从业经验来看,在企业里,大多数的性能调优都是由开发架构师 ...
- 开源性能监控分析工具glowroot
最近在做java性能瓶颈定位分析工具的研究,发现glowroot工具是一款相当不错的APM工具(Wonderful tool),架构简洁,部署简单,上手容易. 经过亲身搭建体验,总结了产品的架构,工具 ...
- JVM系列十(虚拟机性能监控神器 - BTrace).
BTrace 是什么? BTrace 是一个动态安全的 Java 追踪工具,它通过向运行中的 Java 程序植入字节码文件,来对运行中的 Java 程序热更新,方便的获取程序运行时的数据信息,并且,保 ...
- 服务器性能监控神器nmon使用介绍
介绍 Nmon (Nigel's Monitor)是由IBM 提供.免费监控 AIX 系统与 Linux 系统资源的工具.该工具可将服务器系统资源耗用情况收集起来并输出一个特定的文件,并可利用 exc ...
- <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- jvm调优神器——arthas
在上一篇<jvm调优的几种场景>中介绍了几种常见的jvm方面调优的场景,用的都是jdk自带的小工具,比如jps.jmap.jstack等.用这些自带的工具排查问题时最大的痛点就是过程比较麻 ...
- Linux下Java性能监控
Linux下Java性能监控 一.JVM堆内存使用监控 获取thread dump的3种方法: 1)使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun. ...
- <JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- jvm系列(五):tomcat性能调优和性能监控(visualvm)
tomcat服务器优化 1.JDK内存优化 根据服务器物理内容情况配置相关参数优化tomcat性能.当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃.因此一般建议堆的最 ...
随机推荐
- 关于/r与/n 以及 /r/n 的区别总结
应该说还是区别的,\r就是回到行首,\n就是到下一行的,但是一般我们输出程序时,看不到明显的差别的 '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格.通常用的Enter是两个加起来 ...
- python:单元测试框架pytest的一个简单例子
之前一般做自动化测试用的是unitest框架,发现pytest同样不错,写一个例子感受一下 test_sample.py import cx_Oracle import config from sen ...
- 最新 学霸君java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.学霸君等10家互联网公司的校招Offer,因为某些自身原因最终选择了学霸君.6.7月主要是做系统复习.项目复盘.LeetCo ...
- 【剑指offer】面试题 6. 从尾到头打印链表
面试题 6. 从尾到头打印链表 NowCoder 题目描述 输入一个链表的头结点,从尾到头反过来打印出每个结点的值. Java 实现 ListNode Class class ListNode { i ...
- STL源码剖析——序列式容器#1 Vector
在学完了Allocator.Iterator和Traits编程之后,我们终于可以进入STL的容器内部一探究竟了.STL的容器分为序列式容器和关联式容器,何为序列式容器呢?就是容器内的元素是可序的,但未 ...
- 顺序表习题(1)-打印非递减数组a与b的升序并集(去除重复元素)
void Print_Union(SqList a,SqList b) { , q = ; //初始化指针 ; //记录上一次打印的元素 while (p!=a.length&&q!= ...
- linux初识1
linux 操作系统 概念性的理解 1.Linux内置解释器bash 相当于pyhon解释器 2.Linux的内部大多是使用python去书写 云计算 1.只需要 花钱,买腾讯,阿里云服务器 2.专人 ...
- 【LEETCODE】48、数组分类,简单级别,题目:189,217,219,268,283,414
package y2019.Algorithm.array; import java.util.Arrays; import java.util.Stack; /** * @ClassName Rot ...
- JavaScript中数组的key-value在对象中倒装的妙用
对于数组的去重.寻找指定元素的索引,通常我们都是通过遍历来解决,但是在某些应用场景下,将数组的value-key进行倒装,也即将value当做对象的key,key当做对象value,可以极大降低算法的 ...
- Linux虚拟机设置静态ip
二.设置静态ip dhclient 动态分配ip 修改 ifcfg-ens33网卡配置文件 静态分配ip dhclient -r (释放动态分配的ip地址) vi /etc/sysconfig/ne ...