YaBo亚博登录全站_网址 011-32085408

阿里开源的谁人牛X的问题排查工具——Arthas,推出IDEA插件了!

作者:亚博全站官网登录 时间:2021-11-07 17:23
本文摘要:Arthas 对于许多Java开发者来说,已经不行支解了,在我们日常开发、线上问题排查中饰演了很是重要的角色。作为小开发的我,日常需要排查线上运营同学提的种种 bug、种种线上问题诊断、日常运维、线上问题优化等等。 在刚来公司时,我是比力恐惧运维任务的,代码不熟悉、种种问题比力多...险些瓦解的状态,运维的一周基本上没有干活,完全是全身心投入到运维的任务中,排盘问题效率低下。

亚博123yabo

Arthas 对于许多Java开发者来说,已经不行支解了,在我们日常开发、线上问题排查中饰演了很是重要的角色。作为小开发的我,日常需要排查线上运营同学提的种种 bug、种种线上问题诊断、日常运维、线上问题优化等等。

在刚来公司时,我是比力恐惧运维任务的,代码不熟悉、种种问题比力多...险些瓦解的状态,运维的一周基本上没有干活,完全是全身心投入到运维的任务中,排盘问题效率低下。由于深刻体验到了这种瓦解,我一直想改变这种状态,直到 Arthas 的开源,让我在这种瓦解的状态中减轻了不少肩负,同时也让我成为了同事们咨询 Arthas 排盘问题的小辅佐~~虽然使用 Arthas 特别利便,但在此历程中也遇到一些问题,作为问题咨询小辅佐也感应有点不利便,因此才造就了 Arthas idea 插件的降生。现在 Arthas 官方的工具还不够简朴,需要记着一些下令,特别是一些扩展性特别强的高级语法,好比 ognl 获取 spring context 为所欲为,watch、trace 不够简朴,需要结构一些下令工具的信息,因此只需要一个能够简朴处置惩罚字符串信息的插件即可使用。当在处置惩罚线上问题的时候需要最快速、最便捷的下令,因此 Idea Arthas plugin 插件还是有存在的意义和价值的。

---这个是最初编写这个插件的最焦点的理由。Arthas IDEA plugin 实践Arthas 的功效点很是的多(详见下方大图),这里就纷歧一的解说了,可以参考使用文档 ,不外最近一直在更新,使用文档中的下令名称可能有变化。插件安装下载arthas idea插件:https://plugins.jetbrains.com/plugin/13581-arthas-ideaMac: Preferences -> PluginsWindows:Settings -> PluginsInstall Plugin form Disk... 导入插件安装之后重启IDEA就可以愉快的使用啦!获取static 变量首先要获取classloader的hash 值,然后获取下令,这个是一个交互流程需要连贯性,后续只要是static 的通过static spring context的都需要有这个交互的流程,连贯的,都在同一个界面举行操作.粘贴执行,然后获取效果即可。

这里的classloader的hash 值缓存起来的最后合并的剧本如下。ognl-x3'@com.wangji92.arthas.plugin.demo.controller.StaticTest@INVOKE_STATIC_NAME'-c316bc132反射设置static field通过反射举行设置static field ,参考:https://github.com/WangJi92/arthas-idea-plugin/issues/1填写你想要修改的值、默认凭据类型设置默认值 Str->"" Long -> 0L 等等。ognl-x3'#field=@com.wangji92.arthas.plugin.demo.controller.StaticTest@class.getDeclaredField("INVOKE_STATIC_FINAL"),#modifiers=#field.getClass().getDeclaredField("modifiers"),#modifiers.setAccessible(true),#modifiers.setInt(#field,#field.getModifiers()&~@java.lang.reflect.Modifier@FINAL),#field.setAccessible(true),#field.set(null,"设置的值")'-c316bc132Spring Context Invoke通过spring context 举行挪用bean的方法、字段的内容。

Static Spring Context Invoke Method Field首页要设置一下static spring context的路径由于都是通过ognl 挪用static的spring context 都需要classloader,这个就是设置的spring conetxt的地址信息:@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context 参考demo 就需要设置这个地址。ognl-x3'#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#springContext.getBean("commonController").getRandomInteger()'-c316bc132Watch Spring Context Invoke Method Fieldwatch 这个是支持在spring mvc场景 通过watch 间接的获取spring context,需要出发一次接口的挪用,可以参考 :https://github.com/WangJi92/arthas-idea-plugin/issues/5watch-x3-n1org.springframework.web.servlet.DispatcherServletdoDispatch'@org.springframework.web.context.support.WebApplicationContextUtils@getWebApplicationContext(params[0].getServletContext()).getBean("commonController").getRandomInteger()'TimeTunnel Spring Context Invoke Method Field这个是参考了横云断岭 的arthas 通过tt 获取spring context 为所欲为 ,可以参考这个文档:https://github.com/WangJi92/arthas-idea-plugin/issues/4 这里做了些什么?将整个连贯了起来,不需要记着参数信息,然后对于挪用的参数举行简朴的默认封装,庞大的参数场景不支持,需要手动拼接。记载获取spring contexttt-torg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterinvokeHandlerMethod然后凭据这个target 获取spring context 挪用方法tt-w'target.getApplicationContext().getBean("commonController").getRandomInteger()'-x3-i1000获取某个spring 情况变量获取spring 情况变量这里依托,static spring context ,固然这个watch 、和 tt 获取spring context的场景也是支持的。

在线上情况、测试情况法式多庞大,你怎么知道情况中的变量一定是你设置的?在nacos等等设置中心的场景,预计手速慢了一点点,可能就没有上去,这个时候就有这种需求获取当前的情况变量。选中变量,然后右键执行下令。

由于使用静态的static spring context 依然需要classloader的值.这里已经基本上是arthas的上层应用啦。ognl-x3'#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#springContext.getEnvironment().getProperty("custom.name")'-c316bc132获取全部的spring 情况变量比力优先级,最前面的一定优先级最高,你一定被spring的种种优先级顺序搞晕了,那么怎么办呢?arthas idea plugin 支持获取当前的全部的情况变量,依次打印出来,这样就可以相识优先级,特别是接入了nacos、diamond等远程的设置中心,实现纷歧样肯定更晕了。

参考文档:https://blog.csdn.net/xunjiushi9717/article/details/94050139ognl-x3'#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#allProperties={},#standardServletEnvironment=#propertySourceIterator=#springContext.getEnvironment(),#propertySourceIterator=#standardServletEnvironment.getPropertySources().iterator(),#propertySourceIterator.{#key=#this.getName(),#allProperties.add(""),#allProperties.add("-------------------------name:"+#key),#this.getSource()instanceofjava.util.Map?#this.getSource().entrySet().iterator.{#key=#this.key,#allProperties.add(#key+"="+#standardServletEnvironment.getProperty(#key))}:#{}},#allProperties'-c316bc132TimeTunnel Tt方法执行数据的时空隧道,记载下指定方法每次挪用的入参和返回信息,并能对这些差别的时间下挪用举行观察(可以重新触发,周期触发,唯一缺点对于ThreadLocal 信息丢失[隐含参数]、引用工具数据变换无效),这个利便二次触发,特别是自己调试不利便的情况下记载下来,二次触发、周期触发,不外自从段岭大神tt 为所欲为之后都被带偏了。这里arthas 插件做了一些什么?增加了二次触发的一些常用的下令,不让使用者愁于影象,整个历程越发的具有连贯性。

stack 客栈获取方法从那里执行的挪用栈(用途:源码学习挪用客栈,相识挪用流程) 这个是很是好用的功效,对于喜欢喜于排盘问题的小同伴真是福音,arthas idea 插件只是修改的下令的集成,之前也处置惩罚自己编码历程中的问题,源码、问题排查技巧-Java Debug and Arthas:https://blog.csdn.net/u012881904/article/details/104591529stackcom.wangji92.arthas.plugin.demo.controller.CommonControllergetRandomInteger-n5Decompile Class Jad反编译方法、类的源码, 有时候需要检察提交的代码是否上线呢?这个功效就很是的友好。参考文档:https://github.com/WangJi92/arthas-idea-plugin/issues/2jad--source-onlycom.wangji92.arthas.plugin.demo.controller.CommonControllergetRandomIntegerwatch、trace增加了默认参数、默认展开的层级 限制次数,使用者不用知道这些焦点的参数,简朴的使用就好了,要使用越发的高级的自己help 一下就知道了。

watchcom.wangji92.arthas.plugin.demo.controller.CommonControllergetRandomInteger'{params,returnObj,throwExp}'-n5-x3tracecom.wangji92.arthas.plugin.demo.controller.CommonControllergetRandomInteger-n5trace -E(层级的打印trace)trace -E 自己结构起来很是的贫苦,通过界面操作简化了一下,需要视察多个类、多个方法的场景。选择你需要的场景继续添加即可。trace-Ecom.wangji92.arthas.plugin.demo.controller.CommonController|com.wangji92.arthas.plugin.demo.service.ArthasTestServicetraceE|doTraceE-n5Heap Dump打印客栈,有点类似 jmap -dump:format=b,file=/temp/dump.hprof pid 下载下来使用MAT分析即可。

heapdump/tmp/dump.hprof打印客栈信息特殊用法链接这个必须要说一下,这个特殊用法的链接在线上自己束手无措的时候可以检察一下,很是有用。对于通过spring context 挪用方法说明通过spring context 挪用庞大的方法其实是不支持的,由于这个操作起来不利便,还是必须手工处置惩罚一下。

好比这里的 Map names 的处置惩罚方式可以借鉴一下子。更多可以参考demo https://github.com/WangJi92/arthas-plugin-demo总结本文简朴先容了Arthas IDEA插件的安装与使用技巧,该插件解放了大家对于 Arthas 使用的一些影象、机械性的重复事情,接待大家试用!Arthas官方举行了征文运动,于 3 月 26 日—— 4 月 26 日举行,如果你有使用 Arthas 排查过的问题对 Arthas 举行源码解读对 Arthas 提出建议不限,其它与 Arthas 有关的内容。


本文关键词:阿里,开源,的,谁人,牛,问题,排查,工具,—,亚博123yabo

本文来源:亚博全站官网登录-www.hndongchuang.com