别再放心线上 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 的门槛,用户只需关注业务。
原文链接:https://mp.weixin.qq.com/s/so…