Arthas

Arthas(阿尔萨斯)是Alibaba开源的一个Java诊断工具,无需做任何配置,就可以直观的获取各种维度的性能数据,方便开发者进行问题的定位和诊断。

应用场景

动态跟踪Java代码

实时监控JVM状态

查看系统的运行状况

在线排查问题,无需重启

快速定位应用热点生成火焰图

适用范围

适用于JAVA诊断,支持JDK 6+,可运行在Linux/Mac/Winodws系统

Arthas部署使用

以Centos7.7系统为例

(一)部署JAVA环境

Arthas需要使用到JAVA环境。可通过RPM包快速安装JDK

JDK下载地址:(选择相应的RPM包下载即可)

https://www.oracle.com/technetwork/java/javase/downloads/index.html

执行yum install 安装包名称 -y开始安装JDK

查看JAVA环境是否安装成功。执行 java -version返回版本信息即表示成功

(二)下载Tomcat

Arthas会自动检测服务器上运行的JAVA进程,所以我们运行Tomcat作为JAVA进程进行模拟学习

Tomcat下载地址(这里选择下载的是tar.gz格式的压缩包)

https://tomcat.apache.org/download-90.cgi

[root@bogon ~]# tar -zxf apache-tomcat-9.0.29.tar.gz  #解压下载的包
[root@bogon ~]# cd apache-tomcat-9.0.29
[root@bogon apache-tomcat-9.0.29]# cd bin/
[root@bogon bin]# ./startup.sh  #启动Tomcat

(三)Arthas部署及其使用

Arthas下载地址: https://alibaba.github.io/arthas/arthas-boot.jar 
运行方式:
(1)先运行arthas,再选择需要排查的java进程PID
java -jar arthas-boot.jar
命令执行后会进入arthas交互模式,界面会列出当前系统中运行着的java进程pid,选择需要监测的PID即可
(2)运行arthas时,同时指定JAVA进程PID
java -jar arthas-boot.jar PID

执行dashboard会展示当前进程的信息

mac FlameGraph 生成 Java 火焰图 arthas生成火焰图_JAVA

执行thread -n 3查看3个线程最占cpu

 

mac FlameGraph 生成 Java 火焰图 arthas生成火焰图_jar_02

查看CPU占用最高的线程。例如以下就是说明Arthas.java文件的24行有问题(cpuHigh是我自定义的一个函数名)

mac FlameGraph 生成 Java 火焰图 arthas生成火焰图_JAVA_03

执行classloader查看当前系统中有多少类加载器,以及每个加载器加载的类数量,帮助判断是否有类加载器泄露

 

mac FlameGraph 生成 Java 火焰图 arthas生成火焰图_java_04

(3)常用命令

下面列举一些 Arthas 的常用命令,看到这里你可能还不知道怎么使用,别急,后面会一一介绍。

命令 介绍
dashboard    当前系统的实时数据面板
thread       查看当前 JVM 的线程堆栈信息
watch        方法执行数据观测
trace         方法内部调用路径,并输出方法路径上的每个节点上耗时
stack      输出当前方法被调用的调用路径
tt        方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
monitor     方法执行监控
jvm       查看当前 JVM 信息
vmoption    查看,更新 JVM 诊断相关的参数
sc       查看 JVM 已加载的类信息
sm      查看已加载类的方法信息
jad       反编译指定已加载类的源码
classloader   查看 classloader 的继承树,urls,类加载信息
heapdump   类似 jmap 命令的 heap dump 功能

(4)web console

Arthas 目前支持 Web Console,在成功启动连接进程之后就已经自动启动,可以直接访问 http://127.0.0.1:8563/ 访问,页面上的操作模式和控制台完全一样。

mac FlameGraph 生成 Java 火焰图 arthas生成火焰图_jar_05

使用建议

可以考虑对所有安装java程序的服务器安装arthas,在跳板机上访问对应webconsole确定和排查问题