幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

AlibabaJava诊断工具Arthas查看Dubbo动态

  阅读Dubbo源码过程中,会发现,Dubbo消费端在做远程调用时,默认通过Javassist框架为服务接口生成动态代理类,调用javassist框架下的JavassistProxyFactory类的getProxy(Invokerinvoker,Classlt;?〔〕interfaces)方法,动态生成一个存放在JVM中的动态代理类。publicTTgetProxy(InvokerTinvoker,Classlt;?〔〕interfaces){return(T)Proxy。getProxy(interfaces)。newInstance(newInvokerInvocationHandler(invoker));}
  那么,问题来了,如果我们想要一睹该动态生成的代理类内部结构是怎样的,如何才能便捷做到的?
  这就是我想介绍的一款工具,它可以帮助我们查看JDK或者javassist生成的动态代理类,当然,它的功能远不止此,还可以在生产环境进行诊断。
  Arthas是Alibaba开源的Java诊断工具,官方在线文档地址:https:arthas。aliyun。comdoc
  根据官网上的介绍,它还可以解决以下问题
  当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
  这个类从哪个jar包加载的?为什么会报各种类相关的Exception?
  我改的代码为什么没有执行到?难道是我没commit?分支搞错了?
  遇到问题无法在线上debug,难道只能通过加日志再重新发布吗?
  线上遇到某个用户的数据处理有问题,但线上同样无法debug,线下无法重现!
  是否有一个全局视角来查看系统的运行状况?
  有什么办法可以监控到JVM的实时运行状态?
  怎么快速定位应用的热点,生成火焰图?
  怎样直接从JVM内查找某个类的实例?
  这些方案本文暂不展开,这里只展开通过该工具查看Dubbo生成的动态代理类。
  我是直接在使用dubboparent源码中的例子,分别启动了提供者与消费者。
  首先,启动提供者方法publicclassApplication{publicstaticvoidmain(String〔〕args)throwsException{startWithBootstrap();}privatestaticbooleanisClassic(String〔〕args){returnargs。length0classic。equalsIgnoreCase(args〔0〕);}privatestaticvoidstartWithBootstrap(){ServiceConfigDemoServiceImplservicenewServiceConfig();service。setInterface(DemoService。class);service。setRef(newDemoServiceImpl());DubboBootstrapbootstrapDubboBootstrap。getInstance();RegistryConfigregistryConfignewRegistryConfig(zookeeper:127。0。0。1:2181);registryConfig。setTimeout(20000);ProtocolConfigprotocolConfignewProtocolConfig();protocolConfig。setName(dubbo);protocolConfig。setHost(192。168。100。1);protocolConfig。setPort(20877);bootstrap。application(newApplicationConfig(dubbodemoapiprovider))。registry(registryConfig)。service(service)。protocol(protocolConfig)。start()。await();}}
  注意,需要配置RegistryConfig自己的zookeeper,protocolConfig。setHost(xxx。xxx。xxx。xxx)设置成你本地内网的ip即可;
  DemoServiceImpl类详情publicclassDemoServiceImplimplementsDemoService{privatestaticfinalLoggerloggerLoggerFactory。getLogger(DemoServiceImpl。class);OverridepublicStringsayHello(Stringname){logger。info(Helloname,requestfromconsumer:RpcContext。getContext()。getRemoteAddress());returnHelloname,responsefromprovider:RpcContext。getContext()。getLocalAddress();}OverridepublicCompletableFutureStringsayHelloAsync(Stringname){returnnull;}}
  接着,启动消费者,这里可以设置一个休眠时间,这样就可以一直维持消费者运行在内存当中publicclassApplication{publicstaticvoidmain(String〔〕args){runWithRefer();}privatestaticvoidrunWithRefer(){RegistryConfigregistryConfignewRegistryConfig(zookeeper:127。0。0。1:2181);registryConfig。setTimeout(30000);ProtocolConfigprotocolConfignewProtocolConfig();protocolConfig。setName(dubbo);protocolConfig。setHost(192。168。200。1);protocolConfig。setPort(20899);ReferenceConfigDemoServicereferencenewReferenceConfig();reference。setApplication(newApplicationConfig(dubbodemoapiconsumer));reference。setRegistry(registryConfig);reference。setInterface(DemoService。class);DemoServiceservicereference。get();Stringmessageservice。sayHello(dubbo);System。out。println(打印了5555555message);try{Thread。sleep(100000000);}catch(InterruptedExceptione){e。printStackTrace();}}}
  当Dubbo的服务提供者与消费者都正常运行时,说明此时JVM虚拟机内存里已经存在动态生成的代理类,这时,我们就可以开始通过arthasboot。jar工具进行查看了。
  首先,将arthasboot。jar工具下载到你本地,我的是Windows,随便放到一个目录当中,例如
  接着,直接在运行着Dubbo消费端进程的IDEA上打开Terminal
  然后,输入javajarC:Users92493Downloads12229238garthasboot。jar,arthas正常运行成功话,将列出当前JVM上运行的进程
  可以看到我们刚刚启动的provider进程与consumer进程,这时,只需要输入对应进程前面的编号【5】,就可以将Arthas关联到启动类为org。apache。dubbo。demo。consumer。Application的Java进程上了
  到这一步,我们就可以通过指令sc。proxy模糊查询带有proxy标志的类名了,动态代理生成的类一般都是以Proxy标志
  其中,这里的org。apache。dubbo。common。bytecode。proxy0就是消费者生成的动态代理类,我们可以直接反编译去查看它内部结构
  〔arthas57676〕jadorg。apache。dubbo。common。bytecode。proxy0
  控制台就会打印出该动态代理类的内部结构DecompiledwithCFR。Couldnotloadthefollowingclasses:com。alibaba。dubbo。rpc。service。EchoServiceorg。apache。dubbo。common。bytecode。ClassGeneratorDCorg。apache。dubbo。demo。DemoServiceorg。apache。dubbo。rpc。service。Destroyablepackageorg。apache。dubbo。common。bytecode;importcom。alibaba。dubbo。rpc。service。EchoService;importjava。lang。reflect。InvocationHandler;importjava。lang。reflect。Method;importjava。util。concurrent。CompletableFuture;importorg。apache。dubbo。common。bytecode。ClassGenerator;importorg。apache。dubbo。demo。DemoService;importorg。apache。dubbo。rpc。service。Destroyable;publicclassproxy0implementsClassGenerator。DC,Destroyable,EchoService,DemoService{publicstaticMethod〔〕methods;privateInvocationHandlerhandler;publicStringsayHello(Stringstring){Object〔〕objectArraynewObject〔〕{string};Objectobjectthis。handler。invoke(this,methods〔0〕,objectArray);return(String)object;}publicCompletableFuturesayHelloAsync(Stringstring){Object〔〕objectArraynewObject〔〕{string};Objectobjectthis。handler。invoke(this,methods〔1〕,objectArray);return(CompletableFuture)object;}publicObjectecho(Objectobject){Object〔〕objectArraynewObject〔〕{object};Objectobject2this。handler。invoke(this,methods〔2〕,objectArray);returnobject2;}publicvoiddestroy(){Object〔〕objectArraynewObject〔〕{};Objectobjectthis。handler。invoke(this,methods〔3〕,objectArray);}publicproxy0(){}publicproxy0(InvocationHandlerinvocationHandler){this。handlerinvocationHandler;}}
  在Dubbo案例当中,当我们执行Stringmessageservice。sayHello(dubbo)去调用远程接口时,其实是调用了动态代理生成的方法publicStringsayHello(Stringstring){Object〔〕objectArraynewObject〔〕{string};Objectobjectthis。handler。invoke(this,methods〔0〕,objectArray);return(String)object;}
  举一反三,这个Arthas工具类可以在线上生产环境查看一些我们新部署的代码,看是否是新改动的。
  作者:朱季谦
  出处:https:www。cnblogs。comzhujiqianp16114954。html

中华大地上,有多少个摇滚之乡作者毛丽娜编辑李春晖争夺xx故里的事自来有之。争夺赵云故里、李白故里还算师出有名,而那些争做武大郎故里、潘金莲故里的,就有些病急乱投医了。好在文旅的噱头层出不……终身禁赛都不够!球员将裁判打到当场昏迷失去意识因谋杀罪被捕一名球员,与当值的比赛裁判,能有多大的冤仇?极端情况下,球迷们能够看到的最夸张的场面,也不过是球员指着裁判怒骂,愤愤不平。但是,在巴西第六级别联赛中,出现了令人发指的一幕……科学家们组装了费米实验室短基线中微子计划的最终探测器今年9月,AnneSchukraft在短基线近距离探测器上观察了电隔离支撑吊架,该吊架悬挂着阴极的重量,并从上方连接组件。来源:RyanPostel,费米实验室美国能源部……危险!危险!危险!最新童装抽查结果多个不合格项目涉及安全大家恐怕很难想到,因为衣服上的蝴蝶结、绳带,可能被某些东西缠住卡住,从而给孩子的安全带来影响。最近几年的童装国家监督抽查,像重金属、增塑剂等项目超标的情况已经比较少见了,……颜值就是正义,简单聊聊墨案inkpadX月落白款之前大象写过一篇墨案家墨水屏设备的购买指南,用的是小清新担当,作为米链上小型企业,可以说一直都秉承着小米的优秀传统,产品性价比高,而在颜值上更是胜一筹。这是大象2021年……全盛时期的刘备有多么可怕?看看曹操和孙权的态度就明白了全盛时期的刘备有多么可怕?看看曹操和孙权的态度就明白了!刘备的起家实际上,刘备的起点特别低,即使他自称自己为中山靖王之后也难以考证,而且他这一辈已经落魄不堪了,居然……chatGPT,帮我写个PIDchatGPT,帮我写个PID今天上难度昨天用chatGPT写了控制灯的PLC程序,朋友们说太简单,那好,今天上难度。PID是工业领域常用的……玉兰花开了王丽慧江苏玉兰花开了,开在三月以奔放和自由,焕发生命的热情澎湃一树的壮观,像千万只白鸽展翅高飞。以雷锋精神,传播能量花开喜庆,洁白如玉以一颗……喝水洗澡排便按照这个时间表来,对你的好处翻倍每个人都希望能在对的时间做对的事健康生活这方面也是一样你知道吗?不论是喝水、洗澡还是排便其实都有自己的黄金时间喝水的两个黄金时间水是生……英超0狼队升至第6范戴克破门萨拉赫建功北京时间3月2日凌晨4点,202223赛季英超联赛第7轮一场补赛在安菲德尔球场进行,利物浦主场迎战狼队。上半场,两队互交白卷;下半场4分钟内,范戴克和萨拉赫连进两球。最终,利物……早春二月河津樱不依时节乱开花?不,日本的河津樱就是早春二月开花的。当列岛的东北还是搅天风雪,很多地方依然水瘦山寒,伊豆半岛的山野阡陌已是芳菲了。元月半岛南端的下田爪木崎漫山遍野的海边群……轮到00后被网易割了出品虎嗅商业消费组作者黄青春题图视觉中国早年吴晓波做客某档对谈节目时曾表示:我见过的大富豪中,几乎没有一个是快乐的。主持人窦文涛跟他确认:没有一个?吴眼睛转了……
揭牌!开工!进驻!珠海坚持产业第一传来好消息坚持产业第一不松劲,珠海这两天又传来好消息!香洲区集成电路公共服务平台揭牌企业通过微信小程序下单,平台根据其检测需求匹配检测机构、提供全程服务,还可一站式享受……夜读别为难自己与其愁眉苦脸,不如展颜一笑。不知从什么时候开始,很多人都变得焦虑起来。上学抱怨作业多,上班抱怨工作累,下班抱怨家务忙明明日子越过越好,人们的快乐却越来越少。人……携手构建网络空间命运共同体实践案例座谈会在京举行2月8日,携手构建网络空间命运共同体实践案例座谈会在北京举行。世界互联网大会国际组织邀请了近30位2022年案例发布单位的代表参会,围绕如何提升活动举办水平展开深入交流与讨论。……代言人故事刘荣用文字和摄影传播昆明美掌上春城讯刘荣是新媒体行业从业者,是户外达人,露营博主。曾经从事媒体行业6年的资深记者经历,让他积累了丰富文字和摄影经验,成为视觉中国,东方IC签约摄影师。如今,酷爱旅游、露营……甘孜冬日盛景人间绝色来源:【四川融媒体省平台】在广袤的巴颜喀拉山与沙鲁里山之间,你会遇见甘孜,看见你所渴望的关于川西的一切幻想。这里,是旖旎的湿地与壮丽的雪山、是连绵的草原与浩渺的湖泊、是恢……手机来电不可乱接,特别是这些号码开头的,小心是行骗电话!莫名其妙的电话、陌生的电话,以及一些推销电话,这几种类型的电话请不要接。这些年头试图通过电话诈骗捞快钱的骗子特别多。这类号码多数以952、00或、400开头。接到这类号码……2023十二大城市元宵灯光秀!千门开锁万灯明,正月中旬动帝京。正值元宵佳节来临,各地又开始用光为城市上妆,借着新年节庆的余韵开启新一年的辉煌旅程。那么今年的元宵节里各地都是如何的扮相,一起来看看广州……这才是穿羽绒服时髦的秘诀,毛毛领更贵气,纯色款不出错相信有很多人发现了,在冬天,即便羽绒服的时尚感没有其他单品那么强,但是爱穿羽绒服的人仍然很多,而且人们选择羽绒服的主要原因也是因为它的保暖性特别好。冬天羽绒服这种单品也开……广州年味浓处处有新意春节假期,珠江夜游受到市民游客青睐。广州日报全媒体记者全杰摄花城广场是市民游客假期打卡热门地点。广州日报全媒体记者全杰摄欢乐年挂灯笼贴春联,逛花海赏花灯,广州……篮球突破要领篮球突破要点:快、突然性、用脑子打球。一,突破的时候速度一定要快,要把握节奏,善于把握速度的快慢变换节奏。二,突破的时候时机的把握一定要有突然性,观察篮球场上突破的……西藏第一家职业足球俱乐部,拉萨城投足球俱乐部拉萨城投队2017年初,拉萨市体育局与拉萨市城投公司组建拉萨城投足球俱乐部(其中的艰辛难啊,幸好有国企在),聘请了前国脚谢育为主教练、戚务生为顾问(两位大佬加持,有盼头)……2023年显示器推荐选购指南!IPSVATN面板选哪个?分辨本内容来源于什么值得买APP,观点仅代表作者本人作者:星杰e阅读正文之前,大家先问自己一个问题:我买显示器主要用来做什么?日常办公、绘画设计、电竞游戏、视频剪辑还是高清观……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网