阿里面试:Arthas原理和使用,大概说说吧?

作者:微信小助手

发布时间:2024-01-12T08:43:07

Arthas原理和使用,大概说下吧?

Arthas 也是大家定位和解决线上问题,非常常用的一个工具。

所以,这个题目如果答不上来, 说明平时没怎么解决过线上问题, 面试基本就挂。

所以,这道题目,非常重要。

这里,尼恩吧这道面试题以及参考答案,做了详细的梳理。 大家可以收藏起来, 是不是看看,做到温故而知新。

同时,也收入咱们的 《尼恩Java面试宝典PDF》V159版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

最新《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请关注本公众号【技术自由圈】获取,后台回复:领电子书

本文目录

- 尼恩说在前面

- Arthas 在线排错工具的巨大价值

Arthas快速开始

  - 方式一:使用 arthas-boot 启动arthas

  - 方式二:使用 as.sh 脚本启动arthas

Arthas官方使用案例

  - 1、启动 math-game

  - 2、启动 arthas

  - 3、dashboard 展示当前进程的信息

  - 4、thread 命令Main Class

  - 5、jad命令 来反编译 Main Class

  - 6、watch

  - 7、退出 arthas

- Arthas的核心命令详解

  - 1、基础命令

  - 2、类操作命令

    - 2.1 sc 命令

    - sc 命令 使用参考

    - 2.2 sm 命令

      - 参数说明

      - 使用参考

    - 2.3 jad命令

      - 参数说明参数说明

    - 2.4 mc命令

    - 2.6 retransform命令

    - 2.7 dump命令

      - 参数说明

      - 使用参考

    - 2.8 classloader命令

      - 使用参考

  - 3、JVM操作的命令

    - 3.1 dashboard命令

    - 参数说明

      - 使用参考

      - 数据说明

      - JVM 内部线程

    - 3.2 thread命令

      - cpu 使用率是如何统计出来的?

    - eg:支持一键展示当前最忙的前 N 个线程并打印堆栈

    - thread --all, 显示所有匹配的线程

    - 3.3 jvm命令

    - 3.4 sysprop命令

    - 3.5 sysenv命令

    - 3.6 vmoption命令

    - 3.7 getstatic命令

    - 3.8 ognl命令

    - 3.9 heapdump命令

    - 3.10 mbean命令

    - 3.11 memory命令

  - 4、字节码增强命令

    - 4.1 watch命令

    - 4.2 tt 命令

    - 4.3 monitor命令

    - 4.4 stack命令

    - 4.5 trace命令

  - 5、OGNL表达式

    - 基本语法

    - 参数说明

      - ①、调用静态属性

      - ②、调用静态方法

      - ③、调用构造方法

      - ④、读取不同类型的值

- Arthas线上常用场景

  - 1、排查CPU占用过高问题

  - 2、排查线程阻塞问题

  - 3、排查死锁问题

  - 4、排查方法执行过慢问题

  - 5、动态修改线上代码

- Arthas底层原理

- 参考文献

- 说在最后: “offer自由” 很容易的

- 部分历史案例


Arthas 在线排错工具的巨大价值

Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。

更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。

Arthas 旨在解决这些问题。开发人员可以通过Arthas  在线解决生产问题。通过Arthas ,无需 JVM 重启,无需代码更改。 Arthas 作为观察者永远不会暂停正在运行的线程。

Arthas工具

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

Arthas中集成了大部分JDK工具的功能实现,因此,在线上情况时,可以通过它快速的帮助我们解决问题,如CPU占用过高、线程阻塞、死锁、代码动态修改、方法执行缓慢、排查404等。

Arthas 官方文档(https://arthas.aliyun.com/doc/)

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

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

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

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

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

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

  • 有什么办法可以监控到JVM的实时运行状态?

  • 怎么快速定位应用的热点,生成火焰图?

  • 怎样直接从JVM内查找某个类的实例?

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

阿里提供的在线的Arthas Terminal学习方式(Arthas Tutorials (aliyun.com)(https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn)),帮助大家快速上手。

Arthas快速开始

方式一:使用 arthas-boot 启动arthas

推荐使用arthas-boot(推荐),下载arthas-boot.jar,然后用java -jar的方式启动:

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

打印帮助信息:

java -jar arthas-boot.jar -h

arthas-boot启动过程中, 会下载一些依赖包,如果下载速度比较慢,可以使用aliyun的镜像:

java -jar arthas-boot.jar --repo-mirror aliyun --use-http

arthas-boot 完成依赖下载,并且启动。

启动之后,这时候,arthas会列出当前检测到的java进程,

Arthas会将本机中所有的Java进程查询出来,类似于jps/ps的作用: