Arthas--使用手册+实例案例

本文介绍了如何利用阿里巴巴的开源工具Arthas来高效诊断和优化Java应用程序。Arthas可以帮助开发者快速定位类加载问题、监控JVM、分析CPU消耗和内存状况,以及实时查看代码执行情况。通过使用Arthas,可以避免传统日志分析的低效,提高问题排查速度。文章详细阐述了Arthas的下载、启动、常用命令以及实际案例,展示了如何利用Arthas进行线程分析、JVM监控和性能瓶颈查找。

1、背景

公司最近针对一些反应慢的接口进行梳理,着重要求处理一些耗时代码段(中间穿插第三方调用),针对这些痛点,原始方法为打log日志进行日志分析,逐个排查后统一修复,这种做法的缺点是:耗时、效率低,故使用阿里开源Arthas进行分析,大大提高效率

2、什么是 Arthas

Arthas 是阿里巴巴开源java诊断工具,他能帮你解决一些棘手问题:
1、这个类是从哪个jar包加载,为什么会抛出Exception
2、我的代码到底有没有发布成功,总是和运维扯皮
3、如何进行jvm实时监控
4、一些线上bug是否只能通过发包的形式解决
5、线上遇到一些用户问题,线上无法debug,现在无法复现,是否能够全局的审视此类问题

3、下载并启动

1、curl -O https://arthas.aliyun.com/arthas-boot.jar
2、java -jar arthas-boot.jar
### 如果端口被占用 修改启动命令
java -jar arthas-boot.jar --telnet-port 9998 --http-port -1
### 也可以指定目标ip
java -jar arthas-boot.jar telnet-port 9998 --http-port -1 --target-ip 127.0.0.1

1、arthas 启动会自动扫描可监控j进程
在这里插入图片描述
2、输入需要监控的序号
在这里插入图片描述
浏览器控制
在这里插入图片描述

3、打开日志保存

### 由于生产监控日志量比较大,建议打开日志保存,以便进行分析
options save-result true
### 日志保存位置
find . -name "arthas-cache"

4、常用命令

4.1、dashboard

###要标明次数 否则一直会滚动显示
dashboard -n 1

在这里插入图片描述

4.2 thread 命令

### 查询所有线程
thread -all
### 查询阻塞线程
thread -b 
### 查询前3cpu最耗时线程
thread -n 3
### 查询线程id
thread 线程id
### 查询状态线程
thread state runable/block/time_await

4.3 常用系统命令

参数参数描述
jvmTHREAD相关
COUNT: JVM当前活跃的线程数
DAEMON-COUNT: JVM当前活跃的守护线程数
PEAK-COUNT: 从JVM启动开始曾经活着的最大线程数
STARTED-COUNT: 从JVM启动开始总共启动过的线程次数
DEADLOCK-COUNT: JVM当前死锁的线程数
文件描述符相关
MAX-FILE-DESCRIPTOR-COUNT:JVM进程最大可以打开的文件描述符数
OPEN-FILE-DESCRIPTOR-COUNT:JVM当前打开的文件描述符数
sysprop查看系统属性
sysenv查看当前JVM的环境属性(System Environment Variables)
vmoption查看,更新VM诊断相关的参数
getstatic查看静态类属性
ognl可替代getstatic

4.4、其他参数

在这里插入图片描述

5、实际案例

5.1 创建空循环线程,此时该线程会一直占用cpu

在这里插入图片描述

5.2 dashboard -n 3 查询jvm详情

在这里插入图片描述
从中发现,有一个cpu使用率异常

输入 thread 72 定位 异常位置

在这里插入图片描述

输入 jad 及异常代码位置 jad com.tm.provider.service.impl.LoginServiceImpl

在这里插入图片描述

当服务执行时,想要知道某一函数执行效率问题

trace 类地址 类函数

在这里插入图片描述
可以匹配出最耗时函数,同时也可以去除jdk函数

trace  类路径 函数名 -skipJDKMethod true

watch 函数

### 让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。
watch 类名 函数 -x 2 --打印指定深度

tt 函数

### 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
tt -t 类名 函数名

参考地址: https://www.cnblogs.com/wwjj4811/p/16588261.html

为什么要学JVM1、一切JAVA代码都运行在JVM之上,只有深入理解虚拟机才能写出更强大的代码,解决更深层次的问题。2、JVM是迈向高级工程师、架构师的必备技能,也是高薪、高职位的不二选择。3、同时,JVM又是各大软件公司笔试、面试的重中之重,据统计,头部的30家互利网公司,均将JVM作为笔试面试的内容之一。4、JVM内容庞大、并且复杂难学,通过视频学习是最快速的学习手段。课程介绍本课程包含11个大章节,总计102课时,无论是笔试、面试,还是日常工作,可以让您游刃有余。第1章 基础入门,从JVM是什么开始讲起,理解JDK、JRE、JVM的关系,java的编译流程和执行流程,让您轻松入门。第2章 字节码文件,深入剖析字节码文件的全部组成结构,以及javap和jbe可视化反解析工具的使用。第3章 类的加载、解释、编译,本章节带你深入理解类加载器的分类、范围、双亲委托策略,自己手写类加载器,理解字节码解释器、即时编译器、混合模式、热点代码检测、分层编译等核心知识。第4章 内存模型,本章节涵盖JVM内存模型的全部内容,程序计数器、虚拟机栈、本地方法栈、方法区、永久代、元空间等全部内容。第5章 对象模型,本章节带你深入理解对象的创建过程、内存分配的方法、让你不再稀里糊涂。第6章 GC基础,本章节是垃圾回收的入门章节,带你了解GC回收的标准是什么,什么是可达性分析、安全点、安全区,四种引用类型的使用和区别等等。第7章 GC算法与收集器,本章节是垃圾回收的重点,掌握各种垃圾回收算法,分代收集策略,7种垃圾回收器的原理和使用,垃圾回收器的组合及分代收集等。第8章 GC日志详解,各种垃圾回收器的日志都是不同的,怎么样读懂各种垃圾回收日志就是本章节的内容。第9章 性能监控与故障排除,本章节实战学习jcmd、jmx、jconsul、jvisualvm、JMC、jps、jstatd、jmap、jstack、jinfo、jprofile、jhat总计12种性能监控和故障排查工具的使用。第10章 阿里巴巴Arthas在线诊断工具,这是一个特别小惊喜,教您怎样使用当前最火热的arthas调优工具,在线诊断各种JVM问题。第11章 故障排除,本章会使用实际案例讲解单点故障、高并发和垃圾回收导致的CPU过高的问题,怎样排查和解决它们。课程资料课程附带配套项目源码2个159页高清PDF理论篇课件1份89页高清PDF实战篇课件1份Unsafe源码PDF课件1份class_stats字段说明PDF文件1份jcmd Thread.print解析说明文件1份JProfiler内存工具说明文件1份字节码可视化解析工具1份GC日志可视化工具1份命令行工具cmder 1份学习方法理论篇部分推荐每天学习2课时,可以在公交地铁上用手机进行学习。实战篇部分推荐对照视频,使用配套源码,一边练习一遍学习。课程内容较多,不要一次性学太多,而是要循序渐进,坚持学习。      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值