简介: 随着微服务的风行,利用更加轻量和高效,然而带来的窘境是线上问题排查越来越简单艰难。传统的 Java 排查问题,须要重启利用再进行调试,然而重启利用之后现场会失落,问题难以复现。
起源 | 阿里巴巴云原生公众号
Arthas Star 冲破 2.5 万啦
- 开源地址:\_h\_ttps://github.com/alibaba/arthas
- 文档:https://arthas.aliyun.com/doc/
随着微服务的风行,利用更加轻量和高效,然而带来的窘境是线上问题排查越来越简单艰难。传统的 Java 排查问题,须要重启利用再进行调试,然而重启利用之后现场会失落,问题难以复现。
因而自 2018 年 9 月,阿里巴巴开源了久经考验,深受开发者青睐的利用诊断利器 Arthas。
Arthas 通过翻新的字节码织入技术,能够在利用无需重启时,查看调用上下文,高效排查问题;联合火焰图,能够间接定位热点,发现性能瓶颈;通过字节码替换,实现在线热更新代码;同时反对黑屏化和白屏化诊断,能够连贯诊断大规模的集群。
在 2020 年 5 月时,咱们做了 Arthas Star 破 2 万的回顾:
- 精益求精 | 开源利用诊断利器 Arthas GitHub Star 冲破两万
冬去春又来,转眼间一年过来了,Arthas 的 Star 数冲破 2.5 万了~
上面来回顾 Arthas 去年的一些数据和工作。
Arthas 过来一年的数据
1. Arthas Github Star 数冲破 2.5W
2. Arthas Github Contributors 数
Arthas 的开源贡献者人数从 85 增长到 119,非常感谢他们的工作:
3. Arthas 注销公司数从 117 增长到 151 家
过来一年,Arthas 在工商银行、中原银行、朴朴科技、贝壳找房、斗鱼等生产场景落地,欢送更多用户注销:https://github.com/alibaba/arthas/issues/111。
- 工商银行打造在线诊断平台的摸索与实际
4. Arthas 在线教程学习人次:133,996,学习时长:51798 小时
人均体验时长 23 分钟以上。
5. Arthas zip 包月均下载 6.5w 次
上线了 Arthas 新网站之后,咱们统计均匀每个月 arthas zip 包下载 6.5 万次。所以激进预计,Arthas 均匀每个月诊断 6W+ 台机器。
6. Arthas 在 ATA 年度技术搜寻排行第 6
阿里外部的技术论坛 ATA 公布年度热搜关键词 top 100,Arthas 作为 Java 诊断神器是惟一进入 top 10 的非团体指定产品。Arthas 在阿里外部的受欢迎水平可见一斑。
Arthas 过来一年的工作
在过来的一年里,Arthas 公布了 19 个 release 版本,做了大量的改良,上面列出一些重点:
- 全新的 Bytekit 字节码加强框架
- 残缺反对 HTTP API,所有命令都实现适配
- Tenlet/WebSocket/HTTP API 反对对立的鉴权计划
- 全新的热更新命令 retransform
- Tunnel Server 反对集群部署,反对查看火焰图,外部上线反对流计算利用
- 减少 arthas-spring-boot-starter 模块,并反对 endpoint,用户能够用编程形式引入 Arthas
- 上线 arthas.aliyun.com 网站,更好服务国内用户
1. 全新的 Bytekit 字节码加强框架
Github:https://github.com/alibaba/bytekit
Bytekit 框架能够通过简洁的注解来实现字节码加强,具体性能点:
- 丰盛的注入点反对
- 动静的 Binding
- 可编程的异样解决
- 比方在函数入口做加强:
public static class SampleInterceptor {
@AtEnter(inline = true, suppress = RuntimeException.class,
suppressHandler = PrintExceptionSuppressHandler.class)
public static void atEnter(@Binding.This Object object,
@Binding.Class Object clazz,
@Binding.Args Object[] args,
@Binding.MethodName String methodName,
@Binding.MethodDesc String methodDesc) {System.out.println("atEnter, args[0]:" + args[0]);
}
- inline 反对
- invokeOrigin 技术
比方在 Dubbo Filter 里插入 APM 代码:
@Instrument(Interface = "org.apache.dubbo.rpc.Filter")
public abstract class DubboFilter_APM {public Result invoke(Invoker<?> invoker, Invocation invocation)
throws RpcException {
System.err.println("invoker class:" +
this.getClass().getName());
Result result = InstrumentApi.invokeOrigin();
return result;
}
}
通过 Bytekit 框架,Arthas:
- 解决了多个 watch/trace 命令会反复某个类的问题
- 对立应用一个 Transformer,解决了多个加强命令抵触问题
- 实现了动静加强性能,通过指定 ListenerId,watch/trace 命令能够一起合作
2. HTTP API 反对
- https://arthas.aliyun.com/doc/http-api.html
Http API 提供相似 RESTful 的交互接口,申请和响应均为 JSON 格局的数据。绝对于 Telnet/WebConsole 的输入非结构化文本数据,Http API 能够提供结构化的数据,反对更简单的交互性能。
3. 对立鉴权
在明天,利用的平安越来越受到重视。因而,诊断工具在晋升诊断效率的同时,也要留神本身的安全性。
因为 Arthas 减少了 auth 命令,并且对立了 Telnet/WebSocket/HTTP API 的鉴权,参考:
- https://arthas.aliyun.com/doc/auth.html
4. 全新的热更新命令 retransform
- https://arthas.aliyun.com/doc/retransform.html
之前,Arthas 里的 redefine 命令曾经反对热更新性能,然而容易和 jad 命令或者其它 java agent 抵触。因而,咱们开发了全新的 retransform 命令。
retransform 命令和 watch/trace 命令等是同一机制下实现的。如果对同一个类执行多个命令,则会通过上面的解决:
retransform 命令 -> watch 命令 -> trace 命令
能够看到,retransform 命令执行后,不会影响 watch/trace 命令。
5. Tunnel Server 反对集群部署
- https://arthas.aliyun.com/doc/tunnel.html
通过 Arthas Tunnel Server/Client 能够远程管理 / 连贯多个 Agent。Tunnel Server 新减少性能:
- 反对集群部署,反对 redis 存储
- 反对 http proxy,查看火焰图
6. arthas-spring-boot-starter
- https://arthas.aliyun.com/doc/spring-boot-starter.html
通过 arthas-spring-boot-starter,用户能够间接以编程形式引入 Arthas,联合 Tunnel Server,能够轻松实现集群化治理。
7. 全新的网站 arthas.aliyun.com
- https://arthas.aliyun.com/
之前,Arthas 的文档放在 github io 的域名下,常常拜访失败。为了改良访问速度,因而,咱们建设了全新网站,用户拜访文档和下载 Arthas,都更加方便快捷。
Arthas 有奖征文活动
Arthas 征文活动一共办了七期,共收到投稿 30+ 篇,上面是一些优良的文章:
- 工商银行打造在线诊断平台的摸索与实际
- Spring Boot 微服务性能降落九成!应用 Arthas 定位根因
- 是谁在调用我?应用 arthas+jprofiler 做简单链路剖析
- Arthas 定位 Dubbo 手动注册 Eureka 异样
- 用 Arthas 神器来诊断 HBase 异样过程
有奖征文活动还在持续,欢送大家分享~
投稿地址:http://alibabacloud.mikecrm.com/9khcRrs
Arthas 布局
去年,咱们布局了三个指标:
- RESTful API 反对
- 全新的字节码框架 ByteKit
- 插件化反对
实际上实现了 2.5 个,其中插件化反对,咱们孵化出全新的 One Java Agent 我的项目来实现。
- https://github.com/alibaba/one-java-agent
One Java Agent 我的项目的指标:
- 提供插件化反对,对立治理泛滥的 Java Agent
- 插件反对 install/unstall,须要插件方实现接口
- 反对传统的 java agent,即曾经开发好的 java agent
从开源到当初,Arthas 在 Github 上一共有 1200 多个 Issue,最近咱们回收了第一个 Issue:
在一直加强性能的同时,咱们始终在继续改良 Arthas 的易用性。
- 不断改进帮忙文档
- 上线 arthas.aliyun.com,改良国内用户访问速度
- 为大部分命令筹备交互式的在线教程
咱们置信:赠人玫瑰之手,经久犹有余香,感激宽广用户的反对和青睐。
欢送登陆 start.aliyun.com 知口头手实验室体验 Arthas 57 个入手试验:
https://start.aliyun.com/handson-lab/#!category=arthas
Arthas 试验预览
版权申明: 本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。