Arthas性能监控

  • Post author:
  • Post category:其他



前言

当我们在做线上压测时,有个问题就是很多工具在线上不方便用,如jprofiler,因为线上环境比较谨慎,也不太方面加一堆配置参数。那么这里我们推荐使用Arthas这个工具


Arthas工具介绍

Arthas是阿里巴巴开源的性能分析神器。Arthas能为你做什么事情呢?我们来看一下官网的介绍。官网地址:

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

.

当你遇到一下类似的问题而束手无策的时候,Arthas可以帮你解决:

  1. 这个类从哪个jar包加载的?为什么会报各种各类相关的Exception?
  2. 我改的代码为什么没有执行到?难道我没有commit?分支搞错了?
  3. 遇到问题无法线上debug,难道只能通过添加日志在重新发布吗?
  4. 线上遇到某个用户的数据有问题,但是线上同样无法debug,线下无法重现!
  5. 是否有一个全局视角来查看系统运行状况?
  6. 有什么办法可以监控到JVM的实施运行状态?

Arthas 支持JDK6+,支持Linux、Windows、Mac,采用命令行交互模式,同时提供丰富的Tab自动补全功能,进一步方便进行问题的定位和分析。

下载1. 这个类从哪个jar包加载的?为什么会报各种各类相关的Exception?

2. 我改的代码为什么没有执行到?难道我没有commit?分支搞错了?

3. 遇到问题无法线上debug,难道只能通过添加日志在重新发布吗?

4. 线上遇到某个用户的数据有问题,但是线上同样无法debug,线下无法重现!

5. 是否有一个全局视角来查看系统运行状况?

6. 有什么办法可以监控到JVM的实施运行状态?

Arthas 支持JDK6+,支持Linux、Windows、Mac,采用命令行交互模式,同时提供丰富的Tab自动补全功能,进一步方便进行问题的定位和分析。


下载Arthas

可以直接在 Linux 上通过命令下载

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

或者也可以再浏览器直接下载jar包,等待下载成功后,上传到 Linux 服务器上。

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


启动 arthas 工具


主要使用arthas需要安装jdk环境。

安装成功之后,执行如下命令启动 arthas

java -jar arthas-boot.jar

执行成功后,arthas 提供了一种命令行方式的交互方式,arthas 会检测当前服务器上的

Java 进程,并将进程列表展示出来,用户输入对应的编号(1、2、3、4…)进行选择,然

后回车(见红色框,进程[2]就是 tomcat 进程)。

在这里插入图片描述

第一次使用arthas需要自动下载一些依赖包,等待下载完成,就会进入到arthas提供的命令行界面。

在这里插入图片描述


整体dashboard数据

在arthas的命令行界面,输入

dashboard

在这里插入图片描述

现在我们可以看到一个实时的监控界面。我们可以在第一栏看到线程的状态、优先级以及占用哪个线程占用的cpu比较高。

那么我们可以通过这个图标看到有没有线程当前处于阻塞、或者TIME_WATING。有时候出现cpu比较高的场景,我们可以通过这里看到具体是哪一个线程占用的cpu比较高。我们找到这个线程,就可以通过

jstat

查看到该进程当前所在做的事情。

但是大家这里需要注意的是,这里的cpu并不是占用了我们操作系统多少cpu使用率,这里指的是我们这个进程占了多少cpu,其中某一个线程占了该进程的百分之多少。

在这里插入图片描述

第二个区域展示的内存,我们可以看到堆内存总共使用了多少、一共有多少内存、最大内存是多少,以及内存占用的百分比情况。

所以这个dashboard可以帮我们检测线程和内存的总体使用情况。


查看线程监控

我们前面 dashboard 只是看了线程的大体情况,如果说我们想要看线程的具体情况,应该怎么看呢?

Arthas 提供了如下参数,可以看到线程的具体信息。

常用参数:
输入thread会显示所有线程的状态信息 
输入thread -n 3会显示当前最忙的3个线程,可以用来排查线程CPU消耗 
输入thread -b 会显示当前处于BLOCKED状态的线程,可以排查线程锁的问题 


thread


在这里插入图片描述


thread -n 3

这个命令可以把占用cpu消耗最高的线程的堆栈信息打印出来,可以用来排查线程CPU消耗

在这里插入图片描述


thread -b

这个命令可以抓到当前处于BLOCKED状态的线程,可以排查线程锁的问题 ,因为目前我没有阻塞的线程,所有没有。

在这里插入图片描述


jvm监控

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

在这里插入图片描述


函数耗时监控

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

trace 类名 函数 

这个命令可以看到压测具体那一个函数耗时时间最长,接下来我们就可以去对代码进行进一步分析,然后再进行优化。



版权声明:本文为weixin_43865008原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。