arthas介绍

准备

  • 准备docker环境(使用docker容器的方法部署arthas和ES)
nameport(arthas启动默认监听的端口,可以在web端进行访问)
centos\_arthas3658:3658
docker run -tid --name centos_arthas -p 3658:3658 --privileged=true centos:latest /sbin/init
docker exec -it centos_arthas /bin/bash

配置修改

  • 此处的配置修改按照本站之前博客路径进行修改
  • 创建,修改java.policy文件
# 这个policy文件的名字叫什么都可以,但是需要放在这个目录下才行,推荐叫elasticsearch.policy 这样方便区别这个配置文件是干啥用的,原文的解决连接来自github的issue:https://github.com/alibaba/arthas/issues/156  @ralf0131大佬提供的解决办法
vi /opt/es/config/elasticsearch.policy  

# 具体文件内的内容
grant codeBase "file:${user.home}/.arthas/lib/-" {
    // 允许 Arthas 读写自身目录及日志
    permission java.io.FilePermission "${user.home}/.arthas/-", "read,write";
    permission java.io.FilePermission "${user.home}/logs/arthas/-", "read,write,delete";
    
    // 核心运行时权限
    permission java.lang.RuntimePermission "createClassLoader";
    permission java.lang.RuntimePermission "getClassLoader";
    permission java.lang.RuntimePermission "modifyThreadGroup";
    permission java.lang.RuntimePermission "modifyThread";
    permission java.lang.RuntimePermission "shutdownHooks";
    
    // 反射相关权限
    permission java.lang.RuntimePermission "accessClassInPackage.sun.reflect";
    
    // HTTP 协议访问权限
    permission java.lang.RuntimePermission "accessClassInPackage.sun.net.www.protocol.http";
    permission java.lang.RuntimePermission "accessClassInPackage.sun.net.www.http";
    
    // 网络端口权限(Arthas 默认使用 3658 和 8563)
    permission java.net.SocketPermission "127.0.0.1:3658", "listen,resolve";
    permission java.net.SocketPermission "127.0.0.1:8563", "listen,resolve";
    permission java.net.SocketPermission "*", "accept";
};
  • 修改/opt/es/jdk/conf/security/java.policy配置
grant {
    permission org.elasticsearch.ThreadPermission "modifyArbitraryThreadGroup";
    permission org.elasticsearch.ThreadPermission "modifyArbitraryThread";
};


grant {
    permission java.io.FilePermission "<<ALL FILES>>", "read,write";
    permission java.util.PropertyPermission "JM.LOG.PATH", "write";
    permission java.lang.RuntimePermission "*";
    permission java.lang.reflect.ReflectPermission "*";
    permission java.net.SocketPermission "*", "connect,listen,resolve,accept";
    permission ognl.OgnlInvokePermission "*";
};
  • 启动elasticsearch
/opt/es/bin/elasticsearch -d

安装arthas

  • 配置环境变量(这里使用es自带的jdk)

# 如果是安装过JDK环境,es启动的时候也是用的安装过的JDK,那这部分内容可以不用配置,但是如果没有配置jdk的环境,建议还是配置一下,方便启动的时候可以执行java -jar 这样的命令
echo 'export JAVA_HOME=/opt/es/jdk' >>  ~/.bashrc
echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
chmod +x ~/.bashrc
source ~/.bashrc
  • 安装arthas

[elastic@3f24eb371050 opt]$ curl -O https://arthas.aliyun.com/arthas-boot.jar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  135k  100  135k    0     0   217k      0 --:--:-- --:--:-- --:--:--  217k
[elastic@3f24eb371050 opt]$ java -jar arthas-boot.jar --repo-mirror aliyun --use-http
[INFO] arthas-boot version: 3.4.4
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 513 org.elasticsearch.bootstrap.Elasticsearch
1
[INFO] Start download arthas from remote server: http://arthas.aliyun.com/download/3.4.4?mirror=aliyun
[INFO] File size: 11.94 MB, downloaded size: 4.32 MB, downloading ...
[INFO] File size: 11.94 MB, downloaded size: 7.45 MB, downloading ...
[INFO] File size: 11.94 MB, downloaded size: 9.85 MB, downloading ...
[INFO] Download arthas success.
[INFO] arthas home: /home/elastic/.arthas/lib/3.4.4/arthas
[INFO] Try to attach process 513
[INFO] Attach process 513 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'


wiki      https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version   3.4.4
pid       513
time      2020-11-30 05:37:25

[arthas@513]$ shutdown        ##安装完成后先退出增加--target-ip参数启动
  • 启动

[elastic@3f24eb371050 opt]$ java -jar arthas-boot.jar  --target-ip 0.0.0.0
[INFO] arthas-boot version: 3.4.4
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 513 org.elasticsearch.bootstrap.Elasticsearch
1
[INFO] arthas home: /home/elastic/.arthas/lib/3.4.4/arthas
[INFO] Try to attach process 513
[INFO] Attach process 513 success.
[INFO] arthas-client connect 0.0.0.0 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'


wiki      https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version   3.4.4
pid       513
time      2020-11-30 05:39:45

[arthas@513]$ dashboard
  • 监控数据,成功启动

ID   NAME                          GROUP          PRIORITY  STATE     %CPU      DELTA_TIM TIME      INTERRUPT DAEMON
-1   C1 CompilerThread0            -              -1        -         0.23      0.011     0:2.577   false     true
-1   C2 CompilerThread0            -              -1        -         0.13      0.006     0:9.784   false     true
153  Timer-for-arthas-dashboard-02 system         5         RUNNABLE  0.08      0.004     0:0.055   false     true
151  arthas-NettyHttpTelnetBootstr system         5         RUNNABLE  0.06      0.003     0:0.086   false     true
19   elasticsearch[3f24eb371050][s main           5         TIMED_WAI 0.06      0.003     0:0.599   false     true
43   elasticsearch[3f24eb371050][m main           5         TIMED_WAI 0.05      0.002     0:0.032   false     true
45   elasticsearch[3f24eb371050][m main           5         TIMED_WAI 0.04      0.002     0:0.023   false     true
-1   VM Periodic Task Thread       -              -1        -         0.04      0.002     0:0.391   false     true
-1   VM Thread                     -              -1        -         0.01      0.000     0:0.225   false     true
18   elasticsearch[3f24eb371050][[ main           5         TIMED_WAI 0.01      0.000     0:0.101   false     true
-1   Sweeper thread                -              -1        -         0.0       0.000     0:0.159   false     true
Memory                    used    total    max     usage    GC
heap                      264M    989M     989M    26.73%   gc.parnew.count               8
par_eden_space            190M    273M     273M    69.70%   gc.parnew.time(ms)            138
par_survivor_space        26M     34M      34M     77.56%   gc.concurrentmarksweep.count  2
cms_old_gen               47M     682M     682M    7.00%    gc.concurrentmarksweep.time(m 39
nonheap                   126M    137M     -1      92.30%   s)
codeheap_'non-nmethods'   1M      2M       5M      27.30%
metaspace                 97M     104M     -1      93.26%

Runtime
os.name                                                     Linux
os.version                                                  4.19.76-linuxkit
java.version                                                13.0.2
java.home                                                   /opt/es/jdk
systemload.average                                          0.00
processors                                                  6
uptime
  • arthas命令(官方文档里有:https://arthas.aliyun.com/doc/commands.html)

    jvm 相关
        dashboard - 当前系统的实时数据面板
        getstatic - 查看类的静态属性
        heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能
        jvm - 查看当前 JVM 的信息
        logger - 查看和修改 logger
        mbean - 查看 Mbean 的信息
        memory - 查看 JVM 的内存信息
        ognl - 执行 ognl 表达式
        perfcounter - 查看当前 JVM 的 Perf Counter 信息
        sysenv - 查看 JVM 的环境变量
        sysprop - 查看和修改 JVM 的系统属性
        thread - 查看当前 JVM 的线程堆栈信息
        vmoption - 查看和修改 JVM 里诊断相关的 option
        vmtool - 从 jvm 里查询对象,执行 forceGc
        class/classloader 相关
        classloader - 查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
        dump - dump 已加载类的 byte code 到特定目录
        jad - 反编译指定已加载类的源码
        mc - 内存编译器,内存编译.java文件为.class文件
        redefine - 加载外部的.class文件,redefine 到 JVM 里
        retransform - 加载外部的.class文件,retransform 到 JVM 里
        sc - 查看 JVM 已加载的类信息
        sm - 查看已加载类的方法信息
    
    monitor/watch/trace 相关
        注意:请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 stop 或将增强过的类执行 reset 命令。
    
        monitor - 方法执行监控
        stack - 输出当前方法被调用的调用路径
        trace - 方法内部调用路径,并输出方法路径上的每个节点上耗时
        tt - 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
        watch - 方法执行数据观测
        profiler/火焰图
        profiler - 使用async-profiler对应用采样,生成火焰图
        jfr - 动态开启关闭 JFR 记录
    
    鉴权
        auth - 鉴权
        options
        options - 查看或设置 Arthas 全局开关
    
    管道
        Arthas 支持使用管道对上述命令的结果进行进一步的处理,如sm java.lang.String * | grep 'index'
        grep - 搜索满足条件的结果
        plaintext - 将命令的结果去除 ANSI 颜色
        wc - 按行统计输出结果
    
    后台异步任务
        当线上出现偶发的问题,比如需要 watch 某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考这里
    
        使用 > 将结果重写向到日志文件,使用 & 指定命令是后台运行,session 断开不影响任务执行(生命周期默认为 1 天)
        jobs - 列出所有 job
        kill - 强制终止任务
        fg - 将暂停的任务拉到前台执行
        bg - 将暂停的任务放到后台执行
    
    基础命令
        base64 - base64 编码转换,和 linux 里的 base64 命令类似
        cat - 打印文件内容,和 linux 里的 cat 命令类似
        cls - 清空当前屏幕区域
        echo - 打印参数,和 linux 里的 echo 命令类似
        grep - 匹配查找,和 linux 里的 grep 命令类似
        help - 查看命令帮助信息
        history - 打印命令历史
        keymap - Arthas 快捷键列表及自定义快捷键
        pwd - 返回当前的工作目录,和 linux 命令类似
        quit - 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
        reset - 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
        session - 查看当前会话的信息
        stop - 关闭 Arthas 服务端,所有 Arthas 客户端全部退出
        tee - 复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似
        version - 输出当前目标 Java 进程所加载的 Arthas 版本号

通过web访问arthas

  • 增加--target-ip参数(上面的操作步骤中已经加过了)
  • 通过宿主机浏览器进行访问(http://localhost:3658

原文连接,在作者的基础上添加修改了部分内容: https://www.cnblogs.com/liwangcai/p/14060875.html

分类: 其他 标签: arrhas监控esarthasarthas启动报错

评论

-- 评论已关闭 --

目录