别再担心线上 Java 业务出问题怎么办了, Arthas
帮助你解决以下常见问题:
Arthas(阿尔萨斯)是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
Arthas 采用命令行交互模式,同时提供丰富的 Tab
自动补全功能,进一步方便进行问题的定位和诊断。
同时 Arthas 也支持通过 Web Console 进入命令行交互模式,这适用于开发人员没有服务器权限时通过 Arthas Web Console 诊断业务。
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 支持
本小节使用若依SpringBoot作为示例。
首先需要安装 Rainbond云原生应用管理平台,可参阅文档 安装 Rainbond Allinone
团队 -> 新增 -> 基于应用商店创建组件 -> 在应用商店中搜索 若依SpringBoot
进行一键部署。
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 上的微服务 Spring Cloud Pig,并通过 Arthas Tunnel 统一管理 Arthas agent。本小节将使用 Spring Cloud Pig 作为示例。
首先需要安装 Rainbond云原生应用管理平台,可参阅文档 安装 Rainbond Allinone
团队 -> 新增 -> 基于应用商店创建组件 -> 在应用商店中搜索 SpringCloud-Pig
进行一键部署。
团队 -> 新增 -> 基于应用商店创建组件 -> 在应用商店中搜索 Arthas-Tunnel
进行一键部署。
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. 批量更新
更新/重启所有微服务相关组件。可在 列表
中批量操作。
1.可通过 Arthas Tunnel 8080 端口默认生成的域名访问 Web Console。
2.在 Web Console 中的 IP:PORT 填写 Arthas Tunnel 7777 的对外服务端口,7777 端口是 Agent 连接到 Tunnel 的。所以在通过 Web 远程连接到其他服务时修改 AgentId 即可连接
Arthas 采用命令行交互模式,同时提供丰富的 Tab
自动补全功能,进一步方便进行问题的定位和诊断,以下是部分命令,详细请参阅文档Arthas命令列表
以下是部分命令的使用截图:
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 的门槛,用户只需关注业务。