使用阿里Arthas在线排查JAVA问题
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会展示当前进程的信息
执行thread -n 3查看3个线程最占cpu
查看CPU占用最高的线程。例如以下就是说明Arthas.java文件的24行有问题(cpuHigh是我自定义的一个函数名)
执行classloader查看当前系统中有多少类加载器,以及每个加载器加载的类数量,帮助判断是否有类加载器泄露
(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/ 访问,页面上的操作模式和控制台完全一样。
使用建议
可以考虑对所有安装java程序的服务器安装arthas,在跳板机上访问对应webconsole确定和排查问题
更多命令请访问https://alibaba.github.io/arthas/quick-start.html
本文参考链接:
https://blog.csdn.net/u013735734/article/details/102930307#comments
https://alibaba.github.io/arthas/index.html
https://blog.csdn.net/xiao_jun_0820/article/details/82774796