一不小心,它成为了GitHubAlibabaGroup下Star最多的开源项目阿里巴巴云原生

随着微服务的流行,应用更加轻量和高效,但是带来的困境是线上问题排查越来越复杂困难。传统的Java排查问题,需要重启应用再进行调试,但是重启应用之后现场会丢失,问题难以复现。

因此自2018年9月,阿里巴巴开源了久经考验,深受开发者喜爱的应用诊断利器Arthas。

Arthas通过创新的字节码织入技术,可以在应用无需重启时,查看调用上下文,高效排查问题;结合火焰图,可以直接定位热点,发现性能瓶颈;通过字节码替换,实现在线热更新代码;同时支持黑屏化和白屏化诊断,可以连接诊断大规模的集群。

在2020年5月时,我们做了ArthasStar破2万的回顾:

冬去春又来,转眼间一年过去了,Arthas的Star数突破2.5万了~

下面来回顾Arthas去年的一些数据和工作。

Arthas的开源贡献者人数从85增长到119,非常感谢他们的工作:

人均体验时长23分钟以上。

上线了Arthas新网站之后,我们统计平均每个月arthaszip包下载6.5万次。所以保守估计,Arthas平均每个月诊断6W+台机器。

阿里内部的技术论坛ATA发布年度热搜关键词top100,Arthas作为Java诊断神器是唯一进入top10的非集团指定产品。Arthas在阿里内部的受欢迎程度可见一斑。

在过去的一年里,Arthas发布了19个release版本,做了大量的改进,下面列出一些重点:

Bytekit框架可以通过简洁的注解来实现字节码增强,具体功能点:

publicstaticclassSampleInterceptor{@AtEnter(inline=true,suppress=RuntimeException.class,suppressHandler=PrintExceptionSuppressHandler.class)publicstaticvoidatEnter(@Binding.ThisObjectobject,@Binding.ClassObjectclazz,@Binding.ArgsObject[]args,@Binding.MethodNameStringmethodName,@Binding.MethodDescStringmethodDesc){System.out.println("atEnter,args[0]:"+args[0]);}比如在DubboFilter里插入APM代码:

@Instrument(Interface="org.apache.dubbo.rpc.Filter")publicabstractclassDubboFilter_APM{publicResultinvoke(Invoker<>invoker,Invocationinvocation)throwsRpcException{System.err.println("invokerclass:"+this.getClass().getName());Resultresult=InstrumentApi.invokeOrigin();returnresult;}}通过Bytekit框架,Arthas:

HttpAPI提供类似RESTful的交互接口,请求和响应均为JSON格式的数据。相对于Telnet/WebConsole的输出非结构化文本数据,HttpAPI可以提供结构化的数据,支持更复杂的交互功能。

在今天,应用的安全越来越受到重视。因此,诊断工具在提升诊断效率的同时,也要注意自身的安全性。因为Arthas增加了auth命令,并且统一了Telnet/WebSocket/HTTPAPI的鉴权,参考:

之前,Arthas里的redefine命令已经支持热更新功能,但是容易和jad命令或者其它javaagent冲突。因此,我们开发了全新的retransform命令。

retransform命令和watch/trace命令等是同一机制下实现的。如果对同一个类执行多个命令,则会经过下面的处理:

retransform命令->watch命令->trace命令可以看到,retransform命令执行后,不会影响watch/trace命令。

通过ArthasTunnelServer/Client可以远程管理/连接多个Agent。TunnelServer新增加功能:

通过arthas-spring-boot-starter,用户可以直接以编程方式引入Arthas,结合TunnelServer,可以轻松实现集群化管理。

之前,Arthas的文档放在githubio的域名下,经常访问失败。为了改进访问速度,因此,我们建设了全新网站,用户访问文档和下载Arthas,都更加方便快捷。

去年,我们规划了三个目标:

实际上完成了2.5个,其中插件化支持,我们孵化出全新的OneJavaAgent项目来实现。

OneJavaAgent项目的目标:

从开源到现在,Arthas在Github上一共有1200多个Issue,最近我们回收了第一个Issue:

在不断增强功能的同时,我们一直在持续改进Arthas的易用性。

我们相信:赠人玫瑰之手,经久犹有余香,感谢广大用户的支持和喜爱。

THE END
1.已经有的项目run时白屏问题文章浏览阅读996次。本文主要描述了在更新Android Gradle插件至3.2.0和Gradle至4.6后,遇到项目运行时白屏的问题。问题与配置过时有关,包括'androidTestCompile'、'compile'、'androidTestApi'、'testCompile'和'testApi'等。尽管更新后出现警告,但点击Run按钮仍能运行,https://blog.csdn.net/firemylife/article/details/88057607
2.面试996面试必问:前端页面性能指标基本介绍51CTO博客也可以使用其他的计算方法:白屏时间 = 页面开始展示的时间点 - 开始请求的时间点。 首屏: 首屏时间:是指浏览器从响应用户输入网络地址,到首屏内容渲染完成的时间,在需要展示的元素页面之前获取当前时间 - performance.timing.navigationStart。 首屏时间 = 首屏内容渲染结束时间点 - 开始请求的时间点 首屏计算的https://blog.51cto.com/u_11887782/5845405