arthes—线上debug好帮手

arthes简介

以下是arthes官网原文:

通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。

开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。

如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦 JVM 重新启动,它可能无法复现,如上文所述。

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

Arthas(阿尔萨斯)能为你做什么?

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

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

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

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

官网原文把功能写的已经很通透易懂了,我这边主要是补充一下它的用法和一些插件。

官网地址:简介 | arthas

Arthas安装

1. 使用命令行方式安装

  1. 下载临时安装包
shell 复制代码
curl -L [http://pandora.alibaba-inc.com/pandora-web/arthas/install.sh](http://pandora.alibaba-inc.com/pandora-web/arthas/install.sh "http://pandora.alibaba-inc.com/pandora-web/arthas/install.sh") | sh
  1. 输入 ./as.sh开启

  2. 选择要监控的jar然后按回车键即可

2. 下载jar包的方式安装

  1. 下载jar包
shell 复制代码
curl -O https://arthas.aliyun.com/arthas-boot.jar
  1. 启动jar包
shell 复制代码
java -jar arthas-boot.jar
  1. 选择要监控的jar然后按回车键即可 ​

3. 启动监控

启动之后arthes会将当前运行的所有应用都列举出来,如下:

然后从1、2、3中选择一个进入,这里我选择2(这里的SpringBoot-query-0.0.1-SNAPSHOT.jar就是我写的一个测试应用。)进入,但是报错了,没关系按照它第三条提示的命令重启一下 ,成功进入。

Arthas使用

1. 反编译java类

命令格式:jad 包路径+类名

2.函数执行数据观测

这个一般使用它的watch指令,但是自己去拼实在是太麻烦了。下面介绍一个插件,如果你的开发工具是idea,那么可以去插件市场搜索arthes

安装之后,打开编辑器,选中方法名,右键打开工具条

这样就会生成一条监测命令,粘贴到刚才的arthes控制台即可,调用一下该方法,就可以看到出入参数了,非常的便捷好用。

watch指令使用的最多,多用于调试功能。

3. 方法内部调用路径,并输出方法路径上的每个节点上耗时

使用idea插件生成方法的trace命令,贴到arthes控制台,如下:

这样就可以很清楚看到这个方法调用了哪些类、哪些方法并且把耗时打印出来了。

4. 方法执行监控

使用idea插件生成方法的monitor命令,贴到arthes控制台,如下:

monitor命令一般用于统计方法的平均耗时。

这里我就不做官网文档的搬运工了,感兴趣的同学可以自己去瞅一眼,功能真的很强大,值得一用,官网地址:简介 | arthas

相关推荐
wowocpp42 分钟前
spring boot Controller 和 RestController 的区别
java·spring boot·后端
后青春期的诗go1 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
freellf1 小时前
go语言学习进阶
后端·学习·golang
全栈派森3 小时前
云存储最佳实践
后端·python·程序人生·flask
CircleMouse3 小时前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
獨枭4 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架4 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱4 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
☞无能盖世♛逞何英雄☜4 小时前
Flask框架搭建
后端·python·flask
进击的雷神5 小时前
Perl语言深度考查:从文本处理到正则表达式的全面掌握
开发语言·后端·scala