别再担心线上 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 的门槛,用户只需关注业务。

干货分享!JAVA诊断工具Arthas在Rainbond上实践~的更多相关文章

  1. java 诊断工具——Arthas

    该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql! 接下来!今天的主角就登场了,阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 ja ...

  2. Alibaba Java诊断工具Arthas之快速安装和简单使用

    Alibaba Java诊断工具Arthas简单介绍 : 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1.这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception ...

  3. Java诊断工具Arthas

    Java诊断工具Arthas 1. Arthas简介 Arthas是阿里开源的一个线上java诊断工具,发现阿里还是挺喜欢开源一些技术的,造福人类.昨天试用了一下,发现真是强大,解决了我工作两年的很多 ...

  4. 【Java】15分钟快速体验阿里Java诊断工具Arthas

    [墙裂推荐]15分钟快速体验阿里Java诊断工具Arthas : https://alibaba.github.io/arthas/arthas-tutorials?language=cn&i ...

  5. 阿里JAVA诊断工具Arthas的初步使用

    Arthas 是Alibaba开源的Java诊断工具,主要解决以下问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 comm ...

  6. Java 诊断工具 Arthas 教程学习笔记

    Java 诊断利器 Arthas,是阿里的一款开源工具.Github-alibaba/arthas 上可以看到它的介绍.了解它,主要是最近对分析 Java 错误堆栈比较感兴趣,机缘巧合看到了它. 本文 ...

  7. Alibaba Java诊断工具Arthas查看Dubbo动态代理类

    原创/朱季谦 阅读Dubbo源码过程中,会发现,Dubbo消费端在做远程调用时,默认通过 Javassist 框架为服务接口生成动态代理类,接着再去调用代理类实现远程接口调用.在阅读这部分源码时,最后 ...

  8. 款阿里开源的 Java 诊断工具Arthas

    Arthas是什么鬼? Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题. Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux. ...

  9. 阿里巴巴开源框架java诊断工具--Arthas

    下载:arthas wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar --target-i ...

随机推荐

  1. 3行python代码翻译70种语言,这个OCR神奇太赞了

    写在前面的一些P话: 今天给大家介绍一个超级简单且强大的OCR文本识别工具:easyocr. 这个模块支持70多种语言的即用型OCR,包括中文,日文,韩文和泰文等.完全满足了大家对于语言的要求,不管你 ...

  2. 简单到爆——用Python在MP4和GIF间互转,我会了

    写在前面的一些P话: 昨天用公众号写文章的时候,遇到个问题.我发现公众号插入视频文件太繁琐,一个很小的视频,作为视频传上去平台还要审核,播放的时候也没gif来的直接.于是想着找个工具将mp4转换成gi ...

  3. string的底层实现

    String底层实现 string在C++也是一个重要的知识,但是想要用好它,就要知道它的底层是如何写的,才能更好的用好这个string,那么这次就来实现string的底层,但是string的接口功能 ...

  4. 使用高斯Redis实现二级索引

    摘要:高斯Redis 搭建业务二级索引,低成本,高性能,实现性能与成本的双赢. 本文分享自华为云社区<华为云GaussDB(for Redis)揭秘第21期:使用高斯Redis实现二级索引> ...

  5. atcoder ABC 232 B~E题解

    B 模拟,水题 #include<bits/stdc++.h> using namespace std; char s1[100005],s2[100005]; int a1[100005 ...

  6. 4-1 Spring框架基础知识

    Spring框架基础知识 1.Spring 框架作用 主要解决了创建对象和管理对象的问题. 自动装配机制 2.Spring 框架 (Spring容器,JavaBean容器,Bean容器,Spring容 ...

  7. 工作流引擎在vivo营销自动化中的应用实践 | 引擎篇03

    作者:vivo 互联网服务器团队- Cheng Wangrong 本文是<vivo营销自动化技术解密>的第4篇文章,分析了在营销自动化业务引入工作流技术的背景和工作流引擎的介绍,同时介绍了 ...

  8. 阻塞赋值-非阻塞赋值(LUT,FDC,BUF...)

    一.看RTL级综合网络 1.1 FDC FDPE FDRE FDSE均是XILINX FPGA片上资源中四种不同的触发器,具体功能可直接百度 1.2 LUT是实现组合逻辑功能的一张真值表,根据输入值直 ...

  9. 【跟着大佬学JavaScript】之数组去重(结果对比)

    前言 数组去重在面试和工作中都是比较容易见到的问题. 这篇文章主要是来测试多个方法,对下面这个数组的去重结果进行分析讨论.如果有不对的地方,还请大家指出. const arr = [ 1, 1, &q ...

  10. 在.NET 6.0中配置WebHostBuilder

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 在阅读第4章"使用Kestrel配置和定制HTTPS"时,您可 ...