干货分享!JAVA诊断工具Arthas在Rainbond上实践~

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

别再担心线上 Java 业务出问题怎么办了,Arthas 帮助你解决以下常见问题:

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

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

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

同时 Arthas 也支持通过 Web Console 进入命令行交互模式,这适用于开发人员没有服务器权限时通过 Arthas Web Console 诊断业务。

Arthas 在 Rainbond 上集成

1. 插件集成

通过 Rainbond 插件的机制,从 Rainbond 开源应用商店一键安装 Arthas 插件并在组件中开通,组件启动时会自动下载 arthas-agent.jar 结合环境变量配置使用 javaagent 方式启动。

2. Arthas Tunnel 集成

当我们的微服务业务有 10+,这时通过 Arthas 去诊断就会比较麻烦,开发人员没有服务器的权限并且通过 Web Console 访问的话也会由于访问地址太多导致特别混乱。这时就需要通过 Arthas Tunnel Server/Client 来远程管理/连接多个 Agent。

Arthas Agent 会通过 WS 注册到 Arthas Tunnel 中,实现统一管理。

Arthas Tunnel 可通过 Rainbond 开源应用商店一键安装。

3. Arthas Web Console

对于 Spring Boot 应用则无需通过 Arthas Tunnel 访问 Web Console,在组件内添加8563端口即可访问 Web Console。(注意:域名访问需开启 Websocket 支持

使用Arthas诊断Rainbond上的Spring Boot应用

本小节使用若依SpringBoot作为示例。

首先需要安装 Rainbond云原生应用管理平台,可参阅文档 安装 Rainbond Allinone

1. 部署 Spring Boot 应用

团队 -> 新增 -> 基于应用商店创建组件 -> 在应用商店中搜索 若依SpringBoot 进行一键部署。

2. 安装 Arthas Java Agent 插件并配置

2.1 安装插件

团队 -> 插件 -> 从应用商店安装插件 -> 在应用商店中搜索 Arthas-Agent 进行一键部署。

2.2 开通插件

ruoyi-admin 开通 Arthas Agent 插件,在组件内 -> 插件 -> 未开通 -> 开通插件。

2.3 环境变量配置

ruoyi-admin 组件配置环境变量,在组件内 -> 环境变量 -> 添加变量。

变量名 变量值
JAVA_OPTS -javaagent:/arthas/arthas-agent.jar
ARTHAS_APP_NAME ruoyi-admin
ARTHAS_AGENT_ID ruoyi-admin

2.4 添加端口并更新

ruoyi-admin 组件添加 8563 端口并打开对外服务,更新组件完成后可通过默认域名访问 Web Console。

<<< 左右滑动见更多 >>>

使用Arthas诊断Rainbond上的SpringCloud应用

使用 Arthas 诊断部署在 Rainbond 上的微服务 Spring Cloud Pig,并通过 Arthas Tunnel 统一管理 Arthas agent。本小节将使用 Spring Cloud Pig 作为示例。

首先需要安装 Rainbond云原生应用管理平台,可参阅文档 安装 Rainbond Allinone

1. 部署 Spring Cloud Pig

团队 -> 新增 -> 基于应用商店创建组件 -> 在应用商店中搜索 SpringCloud-Pig 进行一键部署。

2. 部署 Arthas Tunnel

团队 -> 新增 -> 基于应用商店创建组件 -> 在应用商店中搜索 Arthas-Tunnel 进行一键部署。

3. 安装 Arthas Agent 插件并配置

1. 安装插件

团队 -> 插件 -> 从应用商店安装插件 -> 在应用商店中搜索 Arthas-Agent 进行一键部署。

2. 开通插件

为每个微服务组件都开通插件,进入微服务组件 -> 插件 -> 开通插件 Arthas-Agent

3. 配置环境变量

为每个微服务组件配置环境变量,在组件内 -> 环境变量 -> 添加变量。

变量名 变量值 说明
JAVA_OPTS -javaagent:/arthas/arthas-agent.jar JAVA 启动参数
ARTHAS_APP_NAME register arthas app name,根据实际情况修改
ARTHAS_AGENT_ID register arthas agent ID 不可与其他 ID相同,是唯一的

4. 配置依赖关系

将所有微服务组件依赖至 arthas tunnel,应用视图切换到编排模式进行拖拉拽。

5. 批量更新

更新/重启所有微服务相关组件。可在 列表 中批量操作。

4. 通过 Arthas Tunnel 连接到其他 Agent 进行诊断

1.可通过 Arthas Tunnel 8080 端口默认生成的域名访问 Web Console。

2.在 Web Console 中的 IP:PORT 填写 Arthas Tunnel 7777 的对外服务端口,7777 端口是 Agent 连接到 Tunnel 的。所以在通过 Web 远程连接到其他服务时修改 AgentId 即可连接

<<< 左右滑动见更多 >>>

Arthas 使用入门

1. Arthas 命令使用

Arthas 采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断,以下是部分命令,详细请参阅文档 Arthas命令列表

  • dashboard - 当前系统的实时数据面板
  • getstatic - 查看类的静态属性
  • heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能
  • jvm - 查看当前 JVM 的信息
  • logger - 查看和修改 logger
  • mbean - 查看 Mbean 的信息
  • memory - 查看 JVM 的内存信息
  • ognl - 执行 ognl 表达式
  • perfcounter - 查看当前 JVM 的 Perf Counter 信息
  • sysenv - 查看 JVM 的环境变量
  • sysprop - 查看和修改 JVM 的系统属性
  • thread - 查看当前 JVM 的线程堆栈信息
  • vmoption - 查看和修改 JVM 里诊断相关的 option
  • vmtool - 从 jvm 里查询对象,执行 forceGc

以下是部分命令的使用截图:

<<< 左右滑动见更多 >>>

2. 生成火焰图

profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。
以下命令均在Arthas Tunnel Web Console 中执行。

1.启动 profiler

$ profiler start
Started [cpu] profiling

2.停止 profiler 并生成火焰图

默认情况下,结果文件是html格式,也可以用--format参数指定:

$ profiler stop --format html
OK
profiler output file: /app/arthas-output/20220907-214802.html

3.通过浏览器查看火焰图

上一步生成的 html 文件在指定的微服务组件中,所以需要在该微服务组件中查看火焰图。

进入到该微服务组件中,例如:pig-auth,在组件端口中添加 3658 端口并打开对外服务并访问 http://domain/arthas-output

最后

Arthas 是款非常好的 Java 诊断工具,而在 Kubernetes 中使用较为复杂。Rainbond 底层基于 Kubernetes,在此之上抽象了应用模型,使用户更方便的在 Kubernets 中部署管理应用,并且通过 Rainbond 的插件机制让用户更便捷的使用 Arthas 诊断业务,降低了在 Kubernetes 中使用 Arthas 的门槛,用户只需关注业务。

相关文章
|
15天前
|
Arthas 监控 Java
Java 诊断利器 Arthas使用
Java 诊断利器 Arthas使用
|
15天前
|
Java 数据挖掘
java实践
【4月更文挑战第9天】java实践
12 1
|
1天前
|
IDE Java 开发工具
Java从入门到精通:1.3.1实践编程巩固基础知识
Java从入门到精通:1.3.1实践编程巩固基础知识
|
7天前
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。
|
8天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
8天前
|
Java API 数据库
深研Java异步编程:CompletableFuture与反应式编程范式的融合实践
【4月更文挑战第17天】本文探讨了Java中的CompletableFuture和反应式编程在提升异步编程体验上的作用。CompletableFuture作为Java 8引入的Future扩展,提供了一套流畅的链式API,简化异步操作,如示例所示的非阻塞数据库查询。反应式编程则关注数据流和变化传播,通过Reactor等框架实现高度响应的异步处理。两者结合,如将CompletableFuture转换为Mono或Flux,可以兼顾灵活性和资源管理,适应现代高并发环境的需求。开发者可按需选择和整合这两种技术,优化系统性能和响应能力。
|
8天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
8天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
14天前
|
Java 调度
Java中的多线程编程:从理论到实践
【4月更文挑战第11天】在现代软件开发中,多线程编程是一个重要的概念。它允许多个线程同时运行,从而提高了程序的执行效率和响应速度。本文将深入探讨Java中的多线程编程,包括基本概念、实现方法以及实际应用案例。我们将从理论出发,然后通过实例来加深理解,最后讨论多线程编程的优势和挑战。
|
17天前
|
Java API UED
Java中的多线程并发编程实践
【4月更文挑战第7天】在现代软件开发中,多线程技术是提高程序性能和响应速度的重要手段。Java语言提供了丰富的多线程支持,包括线程的创建、管理和同步机制。本文将深入探讨Java多线程的基本概念、实现方式以及常见的并发问题,并通过实例代码演示如何高效地利用多线程技术。
11 1