• arthas 使用指导


    arthas 阿尔萨斯

    这种命令行的东西首先得知道 如何使用帮助,帮助文档最先开始用的,应该是可以在网上找到的官方文档

    文档一:https://alibaba.github.io/arthas/index.html ,然后这个文档只是给出了一些常用的例子,并没有详细的写出每一个参数,需要使用命令行帮助才能看到完整参数及其示例

    文档二:命令行帮助,help 命令列出了当前版本可以使用的命令列表,在使用某一个命令时,不知道有哪些参数可以用时可以使用 <command> -h 查看示例及参数列表和每个参数的意思

    文档三:百度,google ,官网 github issues https://github.com/alibaba/arthas/issues

    下载和安装

    curl -O https://alibaba.github.io/arthas/arthas-boot.jar
    java -jar arthas-boot.jar
    

    初次使用时的一些问题

    [ERROR] Target process 116477 is not the process using port 3658, you will connect to an unexpected process.
    [ERROR] 1. Try to restart arthas-boot, select process 90686, shutdown it first with running the 'stop' command.
    [ERROR] 2. Or try to use different telnet port, for example: java -jar arthas-boot.jar --telnet-port 9998 --http-port -1
    

    这个问题初用者必出,原因为 arthas 选择一个应用进行诊断时弄了一个 session,可以使用 arthas-client ,web arthas client 进行登录,这个提示告诉你要先关闭以前的 arthas-boot ,或者重新选择一个端口

    你可以这么做,在 ~/.arthas/lib/3.1.7/arthas 下有一个 arthas-client.jar 使用 java -jararthas-client.jar 可以进入上次的 session ,shutdown 后就可以选择其它的进程进行诊断了,或者你可以继续诊断当前应用

    docker 如何使用

    官网已经有例子了,这样

    docker exec -it arthas-demo /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"
    

    常见使用示例

    arthas 默认是通配符匹配,可以开启正则匹配

    用到后面,需要了解表达式核心变量 https://alibaba.github.io/arthas/advice-class.html

    查询类加载器,类和类的所有方法,类源码

    classloader 用来查询类加载器,以树状结构展示类加载器 classloader -t

    sc 用来查询类,全称为 search-class ,如要查所有的 controller ,一般取名是有规则的 sc *Controller* ,查询单个类时,加 -d 参数可以看到详细信息,一般用来 看这个类是哪个类加载器加载的

    sm 用来查询类的方法,全称为 search-method ,如要查当前查到 Controller 的所有的接口,选择某一个 Controller sm xx.xx.xx.xxxController

    jad 用来在线反编译代码,可以用来查看线上代码是否已经更新

    查看接口出入参,并重新发起请求 tt

    第一步,先监控方法 tt -t classFullName methodName ,发起请求后,会展示一个请求列表,第一列为requestId

    第二步,另启一个 arthas-client,执行 tt -i <requestId> 可以看到请求入参和出参,使用 -x 参数可以增加展示深度,看到更详细的信息,例如:tt -i <requestId> -x 3

    如果在调试,需要使用同样的参数重新发起请求,只需要执行 tt -i <requestId> -p 就可以重新发起调用

    查询出慢方法 trace

    trace classFullName methodName -n 3 '#cost > 10' 
    监控方法调用 3 次,并找出花费时长超过 10ms 的节点
    
    注:trace 只会监控一层子调用
    

    找到 applicationContext 获取 bean

    比较通用一点的办法是监控 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 类的 invokeHandlerMethod 方法,因为所有的请求都会经过这里,然后这个类有一个方法是获取 applicationContext ,可以这样做

    tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod
    
    然后随便发起一个请求,再使秀 ognl 表达式获取 applicationContext  对象
    之后就可以调用方法了
     tt -i 1000 -w 'target.getApplicationContext().getBean("groupMembersController").detail("1")' 
    
    

    上面只是调了一个字符串的参数,如果需要调用复杂参数的方法,就需要了解下 ognl 表达式了,可以使用 ognl 表达式来创建对象

    查看 Jvm 参数并设置 vmoption

    可能 Jdk 提供的工具也有这样的功能,但这个可以有网页客户端,使用 Jdk 提供的工具类需要在本机调用,可能由于公司用户权限的原因可能使用不了,那这玩意就有用了。

    使用这个命令必须使用 Jvm 参数的全称,简称是不支持的,并且要求大小写完全匹配,后面跟一个参数用于显示值,两个用于设置值

    可以在这个文档查找全称 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BGBCIEFC

    常见全称:

    -Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize)
    -Xss (or -XX:ThreadStackSize)
    

    引入 issues 上的一张图来说明 arthas 的使用,可以当操作手册 ,图片较大,可以下载下来看,清晰点


    我的博文大纲:https://blog.csdn.net/sanri1993/article/details/52201255

  • 相关阅读:
    SQLSERVER Tempdb的作用及优化
    sqlserver分区表索引
    Install the mongdb
    mysql常用参数监控
    Mysql由浅入深
    nginx配置文件优化
    ping主机不通邮件报警
    top结果解释
    了解MQ
    kafka安装部署
  • 原文地址:https://www.cnblogs.com/sanri1993/p/12196349.html
Copyright © 2020-2023  润新知