介绍
Arthas(中文名: 阿尔萨斯) , 介绍就在 github.com/alibaba/art… , 十分详细, 就是一个线上问题查找工具, 由于JDK的工具 , 并不适合所有人, 而且有些功能不全面. 所以基于这个. 就出现了这个Arthas.
用之前, 问一些问题 ?
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
- 怎么快速定位应用的热点,生成火焰图?
哈哈哈. 好吧, 如果没有工作确实不知道啥问题 .
文档的详细介绍都是在 alibaba.github.io/arthas 这里. 我觉得比我写, 要好的多. 所以留个链接 . 基本看看这个 , 自己敲一遍命令就够了.
其实阿尔萨斯, 实现原理也是Java提供的一些基础工具类实现的, 这些太底层的东西确实大多数人不了解 .
这里有一篇文章 , 教你如何实现 redefine 功能的实现. 所以可以感兴趣看看 . 链接 : www.cnblogs.com/goodAndyxub…
细节
比较好玩的是 redefine . 不过这个玩意 . 怎么说, 需要你拿一个已经编译好的class文件, 可以重新加载到JVM的内存中. 但是mc直接编译的话. 大多都编译不通 , 最好借助第三方工具.
还有就是 tt 命令的遇见方法重载的问题 . 可以通过 tt -t com.example.springbeanconfig.arthas.Demo echo 'params[0] instanceof Integer' 最后这个 'params[0] instanceof Integer' 意思就是第一个参数类型是Integer , 这个还是要知道的. tt命令会将每次调用保存起来, 就是查询的记录下索引. 可以根据索引找到具体细节.
还有很多后续补充.
原理
其实也就是基于Java提供的一些工具类去实现的. 想看源码的可以导入 依赖.
<!-- https://mvnrepository.com/artifact/com.taobao.arthas/arthas-boot -->
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-boot</artifactId>
<version>3.1.7</version>
</dependency>
Arthas的具体实现, 其实是我们忽略的细节. 其中 issues部分就表述了很多功能的实现 : github.com/alibaba/art…
idea 插件
最后安利一波插件 , arthas的插件, 使用起来很方便, idea的插件, 主要是用来生成命令的 .
地址 : plugins.jetbrains.com/plugin/1358…
使用介绍 : www.yuque.com/docs/share/…
使用起来很方便.