Java进阶(JVM调优)——阿里云的Arthas的使用 & 安装和使用 & 死锁查找案例,重新加载案例,慢调用分析

本文介绍了阿里云的ArthasJVM调优工具,涵盖安装、使用教程,如dashboard、heapdump、jad等命令的实战应用,以及死锁检测、类信息重载和调用链分析等技巧,帮助Java开发者提升线上问题排查效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

前言

JVM作为Java进阶的知识,是需要Java程序员不断深度和理解的。

本篇博客介绍JVM调优的工具阿里云的Arthas的使用,安装和使用,命令的使用案例;死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案例。

其他相关的JVM博客文章如下:

系列文章合集如下:
【合集】Java进阶——Java深入学习的笔记汇总 & 再论面向对象、数据结构和算法、JVM底层、多线程、类加载 …

引出


1.JVM调优的工具阿里云的Arthas的使用,安装和使用;
2.命令的使用案例,dashboard,heapdump,jvm,sm,jad;
3.死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案例。

Arthas的使用

官网和初识

阿尔萨斯官网:https://arthas.aliyun.com/doc/

在这里插入图片描述

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

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

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到 JVM 的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从 JVM 内查找某个类的实例?

在这里插入图片描述

安装和使用

curl -O https://arthas.aliyun.com/arthas-boot.jar #下载arthas

java -jar arthas-boot.jar #启动阿尔萨斯

1.启动自己的jar包

java -jar -Xms200m -Xmx200M -XX:+PrintGC  -XX:-UseParallelGC spring-gc-demo-1.0-SNAPSHOT.jar

在这里插入图片描述

2.然后启动阿尔萨斯

在这里插入图片描述

在这里插入图片描述

3.命令参考

https://arthas.aliyun.com/doc/commands.html

在这里插入图片描述

命令的使用案例

1.dashboard

通过这个命令,可以查看哪根线程是最吃CPU的!替代:top -p 进程 -H

得到进程仪表盘,当前系统的实时数据面板,按 ctrl+c 退出

在这里插入图片描述

2.heapdump

替代jmap命令,dump java heap, 类似 jmap 命令的 heap dump 功能

3.jvm

查看当前 JVM 信息,替代jinfo命令

在这里插入图片描述

4.sm

查看已加载类的方法信息

在这里插入图片描述

5.jad

jad 反编译看一下

在这里插入图片描述

6.help

arthas 的帮助命令

7.memory

查看 JVM 内存信息

在这里插入图片描述

8.watch

让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值抛出异常入参

死锁的场景

thread 线程信息

查看当前线程信息,查看线程的堆栈

thread -h 查看帮助

在这里插入图片描述

在这里插入图片描述

检测死锁

thread -b 

在这里插入图片描述

jad反编译

想在Linux上直接查看某一个类的源代码,可以使用它来完成代码的反编译

在线反编译,比如:A 团队 调用 B团队的接口,当获得结果不对,那么则可以使用这种命令,在线查看B团队中的类的代码

类似于:javap

jad com.tianju.gc.controller.DeadLockController

在这里插入图片描述

retransform 重新加载某一个类的类信息

retransform

在不停止程序的情况,重新加载某一个类的类信息

retransform /root/CardInfo.class

在这里插入图片描述

在这里插入图片描述

retransform /usr/local/software/jar/java-gc-demo/CardInfo.class 

在这里插入图片描述

在这里插入图片描述

调用慢的问题分析

trace调用路径

方法内部调用路径,并输出方法路径上的每个节点上耗时

主要用于:性能调优

分布式系统使用:zipkin ,skywarking

在这里插入图片描述

在这里插入图片描述

trace命令查看调用链

在这里插入图片描述

monitor 方法执行监控

方法执行监控

服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 命令不会引起原有业务逻辑的改变

在这里插入图片描述

其他使用案例

https://github.com/alibaba/arthas/issues?q=label%3Auser-case

https://github.com/alibaba/arthas/issues/1494

在这里插入图片描述


总结

1.JVM调优的工具阿里云的Arthas的使用,安装和使用;
2.命令的使用案例,dashboard,heapdump,jvm,sm,jad;
3.死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案例。

### 使用 Arthas 进行 JVM #### 安装与启动 Arthas 为了使用 ArthasJava 应用程序进行性能,首先需要安装并启动该工具。可以通过 `curl` 命令下载 arthas-boot.jar 文件至指定目录[^5]。 ```bash [root@localhost ~]# curl -O https://alibaba.github.io/arthas/arthas-boot.jar ``` 接着,利用如下命令来启动 Arthas: ```bash java -jar /path/to/arthas-boot.jar ``` 这会列出当前机器上的所有 Java 进程供选择连接。 #### 查看线程状态 一旦成功附着到目标进程之后,就可以开始探索其内部运作状况了。例如,要获取正在运行的应用程序中所有的线程及其状态信息,可输入 `thread` 命令: ```plaintext thread ``` 此操作有助于识别是否存在死锁现象或是长时间未响应的任务,进而采取措施改善多线程环境下的表现[^1]。 #### 方法执行耗时统计 对于那些怀疑存在性能瓶颈的方法来说,可以借助于 `time` 或者更为详细的 `trace` 功能来进行深入查。比如下面的例子展示了怎样追踪某个特定方法每次被用所花费的时间长度以及它内部各个子步骤的具体消耗情况: ```plaintext trace com.example.MyClass myMethod ``` 上述指令不仅能够揭示出哪些地方耗费过多资源,而且还能辅助确认是否有不必要的重复计算发生,从而指导后续化工作方向的选择[^2]。 #### 类加载器视图 当遇到 ClassNotFound 错误或者其他跟类加载有关的问题时,则应该考虑运用 `sc` (search class) `sm` (search method)查找加载的类文件或者是它们所属的包路径;另外还有专门用于展示整个应用程序内不同类型的ClassLoader之间关系结构的地图——即通过 `clscan` 获取分类汇总表单,再配合 `jad` 反编译字节码片段以便直观理解业务逻辑实现细节。 #### 内存泄漏检测 针对可能存在的内存泄露风险点,除了依赖常规的日志记录外,还可以主动出击,定期审查堆栈快照数据以捕捉可疑对象实例的增长趋势。Arthas 提供了一个非常实用的功能叫做 `heapdump` ,它可以导出一份完整的 JVM Heap Dump 文件给专业的分析软件做进一步处理,同时也内置了一些简单的查询语句用来即时评估某些变量占用空间大小的变化规律[^4]。 ```plaintext watch com.example.MyService handleRequest {params, returnObj} "{'method': 'handle', 'paramTypes': $args[0].getClass().getName(), 'returnType': $return.getClass().getName()}" ``` 这段脚本可以帮助监视服务接口接收请求前后参数传递链路里涉及的数据类型转换过程是否合理有效,防止因不当设计而导致意外增长的对象引用链条影响整体稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arya's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值