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

相关推荐
蓝田~4 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端
theLuckyLong5 分钟前
SpringBoot后端解决跨域问题
spring boot·后端·python
.生产的驴6 分钟前
SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性
java·spring boot·后端·spring·spring cloud·gateway·rabbitmq
小扳10 分钟前
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
运维·spring boot·后端·mysql·spring cloud·docker·容器
v'sir20 分钟前
POI word转pdf乱码问题处理
java·spring boot·后端·pdf·word
李少兄24 分钟前
解决Spring Boot整合Redis时的连接问题
spring boot·redis·后端
码上一元5 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
枫叶_v7 小时前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端
杜杜的man8 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
java小吕布8 小时前
Java中Properties的使用详解
java·开发语言·后端