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 使用更加丝滑起来

  • 相关阅读:
    移动Web开发规范概述
    hibernate 多对多
    hibernate 1 对1
    hibernate 双向1对多
    Hibernate 单项多对1
    Hibernate Session 4种对象状态
    Hibernate Session缓存
    Hibernaate 详解
    Hibernate学习 (一)
    Struts拦截器Interceptor
  • 原文地址:https://www.cnblogs.com/LeesinDong/p/12225826.html
Copyright © 2011-2022 走看看