zoukankan      html  css  js  c++  java
  • arthas idea plugin 插件,arthas 使用更加丝滑起来

    一、背景

    目前Arthas 官方的工具还不够足够的简单,需要记住一些命令,特别是一些扩展性特别强的高级语法,比如ognl获取spring context 为所欲为,watch、trace 不够简单,需要构造一些命令工具的信息,因此只需要一个能够简单处理字符串信息的插件即可使用。当在处理线上问题的时候需要最快速、最便捷的命令,因此Idea arthas 插件还是有存在的意义和价值的。

    二、支持的功能

    支持的功能都是平时处理最常用的一些功能,一些快捷的链接,在处理紧急问题时候不需要到处查找,都是一些基本的功能,自动复制到剪切板中去,方便快捷。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cnt72s5t-1579489232408)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=286&name=image-20200119120930544.png&originHeight=572&originWidth=1074&size=241010&status=done&style=none&width=537)]

    在这里插入图片描述

    2.1 watch

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B4UR3lc3-1579489232409)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=230&name=image-20200119120931284.png&originHeight=460&originWidth=1570&size=326956&status=done&style=none&width=785)]

    watch com.command.idea.plugin.utils.StringUtils toLowerFristChar '{params,returnObj,throwExp}' -n 5 -x 3
    1
    

    2.2 trace

    2.2.1 基本trace

    trace com.command.idea.plugin.utils.StringUtils toLowerFristChar -n 5
    1
    

    2.2.2 trace -E

    trace命令只会trace匹配到的函数里的子调用,并不会向下trace多层。因为trace是代价比较贵的,多层trace可能会导致最终要trace的类和函数非常多。因此Arthas 官方支持 trace -E 特殊获取多个,该插件支持一下trace -E

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Dq2z0z6-1579489232410)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=295&name=image-20200119120931394.png&originHeight=590&originWidth=1144&size=283907&status=done&style=none&width=572)]

    trace -E com.github.wangji92.arthas.plugin.utils.ClipboardUtils|com.github.wangji92.arthas.plugin.utils.OgnlPsUtils getClassBeanName|setClipboardString -n 5
    1
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFnbGISH-1579489232410)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=140&name=image-20200119120930968.png&originHeight=280&originWidth=1086&size=175088&status=done&style=none&width=543)]

    2.3 static ognl (字段或者方法)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0DptejIm-1579489232410)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=234&name=image-20200119120931185.png&originHeight=468&originWidth=1410&size=304620&status=done&style=none&width=705)]

    2.3.1 右键static ognl

    2.3.2 获取classload命令

    必须要获取,不然会找不到classload,arthas 官方获取问题系统的classload,spring 项目应该无法获取到这个class的信息,因此首先执行一下这个命令

    sc -d com.command.idea.plugin.utils.StringUtils
    1
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FWqp2xVl-1579489232411)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=196&name=image-20200119120930527.png&originHeight=392&originWidth=1346&size=218372&status=done&style=none&width=673)]

    2.3.2 复制到界面,获取命令,执行即可

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FIGnmP4T-1579489232412)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=126&name=image-20200119120930837.png&originHeight=252&originWidth=1290&size=161506&status=done&style=none&width=645)]

    ognl  -x  3  '@com.command.idea.plugin.utils.StringUtils@toLowerFristChar(" ")' -c 8bed358
    1
    

    2.4 Invoke Bean Method

    实际上就是根据当前的spring项目中的获取静态的spring context这样可以直接根据这个context直接获取任何的Bean方法,一般在Java后端服务中都有这样的Utils类,因此这个可以看为一个常量! 可以参考:http://www.dcalabresi.com/blog/java/spring-context-static-class/ 有了这个,我们可以跟进一步的进行数据简化,由于在idea这个环节中,可以获取方法参数,spring bean的名称等等,非常的方便。

    public class ApplicationContextProvider implements ApplicationContextAware {
        
        private static ApplicationContext context;
     
        public ApplicationContext getApplicationContext() {
            return context;
        }
     
        @Override
        public void setApplicationContext(ApplicationContext ctx) {
            context = ctx;
        }
    }
    12345678910111213
    

    2.4.1 设置获取spring context的上下文

    ps 这里可以使用@applicationContextProvider@context 这样,比如还行进行函数调用可以直接使用ognl逗号分割可以继续执行的语法,比如 @applicationContextProvider@context,#springContext.getBean(“name”).todo() 后续我们需要在界面调用任何的方法都会添加上这句话。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cixwIoFR-1579489232412)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=701&name=image-20200119120930870.png&originHeight=1402&originWidth=2152&size=547914&status=done&style=none&width=1076)]

    2.4.2 右键点击需要调用的方法

    这里的策略和static ognl 一样的,本质还是ognl的调用。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AaQuVxht-1579489232413)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=191&name=image-20200119120931351.png&originHeight=382&originWidth=1632&size=318255&status=done&style=none&width=816)]

    ognl  -x  3  '#springContext=@applicationContextProvider@context,#springContext.getBean("arthasInstallCommandAction").actionPerformed(new com.intellij.openapi.actionSystem.AnActionEvent())' -c desw22
    1
    

    特别说明

    太复杂的参数不太适用于对于线上问题的诊断,因此方法参数尽可能的简单,这里有一套规则,因为ognl的语法和Java类似的,在获取到参数的时候会进行默认的参数构造处理。
    String ——> “”
    Number、Byte 、Char ——> 0
    Map ——> #{"":" "} ognl 语法
    List ——>{}
    数组 int[] ——>new int[]{}
    other ——> new XXXClass() 参数太复杂了默认直接new了一个
    Special 你的参数可能是从springContext中获取,你可以修改表达式
    …,#newParam= #springContext.getBean(“beanName”).todo(),#springContext.getBean(“other”).to(#newParam)
    这样使用参数定义到你的bash脚本中去,这种属于特殊用法,不具有一般的通用性

    2.5 install(linux)

    安装脚本,可以一键的通过as.sh 进行执行

    curl -sk https://arthas.gitee.io/arthas-boot.jar -o ~/.arthas-boot.jar  && echo "alias as.sh='java -jar ~/.arthas-boot.jar --repo-mirror aliyun --use-http'" >> ~/.bashrc && source ~/.bashrc
    1
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0O7zrdp7-1579489232413)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=257&name=image-20200119120931319.png&originHeight=514&originWidth=2060&size=649699&status=done&style=none&width=1030)]

    2.6 常用特殊用法链接

    三、其他

    3.1 安装

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CgVLtl0W-1579489232414)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=173&name=image-20200119120931225.png&originHeight=346&originWidth=756&size=133740&status=done&style=none&width=378)]

    3.2 快捷键设置

    在这里插入图片描述

    3.3 代码地址

    https://github.com/WangJi92/arthas-idea-plugin

    3.4 插件开发,发布

    参考 插件开发: https://www.jianshu.com/p/722841c6d0a9
    就可以看到编译后的zip包了
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iBZ1C5Gh-1579489232415)(./arthas idea plugin 插件,arthas 使用更加丝滑起来/format,png#align=left&display=inline&height=273&name=image-20200119120931522.png&originHeight=546&originWidth=908&size=347771&status=done&style=none&width=454)]

    四、下载地址

    https://plugins.jetbrains.com/plugin/13581-arthas-idea,直接搜索arthas 即可下载,idea 官方插件

    转自:./arthas idea plugin 插件,arthas 使用更加丝滑起来

  • 相关阅读:
    Linux之文件处理命令
    Linux基础命令
    rip实验
    Linux基础之磁盘分区
    mysql安装
    centos Apache、php、mysql默认安装路径
    You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit.
    Wrong permissions on configuration file, should not be world writable!
    机器会学习么 学习总结
    实验 5 Spark SQL 编程初级实践
  • 原文地址:https://www.cnblogs.com/LeesinDong/p/12225826.html
Copyright © 2011-2022 走看看