阿里开源 java 项目内存监控工具 arthas

发布于 更新于
本文目录
  1. 介绍
  2. 安装
  3. 监控java进程

技术文章性能测试

Arthas(阿尔萨斯)是阿里巴巴开源的Java诊断工具,实现了jvm自带的几乎所有诊断功能,深受jvm分析人员喜爱。

介绍

Arthas(阿尔萨斯)是阿里巴巴开源的Java诊断工具,实现了jvm自带的几乎所有诊断功能,深受jvm分析人员喜爱。

安装

因为这个工具是jar文件,需要有java运行环境,所以请先确保系统安装了jre或jdk

# 检测环境

java -version
# 显示类似如下,说明已经拥有java运行环境;
# 如果报错,请先安装或检查jre\jdk是否安装且配置环境变量

openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
# linux系统

# 下载jar包
curl -O https://arthas.aliyun.com/arthas-boot.jar

# 运行监控
java -jar arthas-boot.jar

# 获取工具帮助
java -jar arthas-boot.jar -h

[INFO] arthas-boot version: 3.3.9
Usage: arthas-boot [-h] [--target-ip <value>] [--telnet-port <value>]
       [--http-port <value>] [--session-timeout <value>] [--arthas-home <value>]
       [--use-version <value>] [--repo-mirror <value>] [--versions] [--use-http]
       [--attach-only] [-c <value>] [-f <value>] [--height <value>] [--width
       <value>] [-v] [--tunnel-server <value>] [--agent-id <value>] [--stat-url
       <value>] [--select <value>] [pid]

Bootstrap Arthas

EXAMPLES:
  java -jar arthas-boot.jar <pid>
  java -jar arthas-boot.jar --target-ip 0.0.0.0
  java -jar arthas-boot.jar --telnet-port 9999 --http-port -1
  java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws'
  java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws'
--agent-id bvDOe8XbTM2pQWjF4cfw
  java -jar arthas-boot.jar --stat-url 'http://192.168.10.11:8080/api/stat'
  java -jar arthas-boot.jar -c 'sysprop; thread' <pid>
  java -jar arthas-boot.jar -f batch.as <pid>
  java -jar arthas-boot.jar --use-version 3.3.9
  java -jar arthas-boot.jar --versions
  java -jar arthas-boot.jar --select arthas-demo
  java -jar arthas-boot.jar --session-timeout 3600
  java -jar arthas-boot.jar --attach-only
  java -jar arthas-boot.jar --repo-mirror aliyun --use-http
WIKI:
  https://arthas.aliyun.com/doc

Options and Arguments:
 -h,--help                      Print usage
    --target-ip <value>         The target jvm listen ip, default 127.0.0.1
    --telnet-port <value>       The target jvm listen telnet port, default 3658
    --http-port <value>         The target jvm listen http port, default 8563
    --session-timeout <value>   The session timeout seconds, default 1800
                                (30min)
    --arthas-home <value>       The arthas home
    --use-version <value>       Use special version arthas
    --repo-mirror <value>       Use special remote repository mirror, value is
                                center/aliyun or http repo url.
    --versions                  List local and remote arthas versions
    --use-http                  Enforce use http to download, default use https
    --attach-only               Attach target process only, do not connect
 -c,--command <value>           Command to execute, multiple commands separated
                                by ;
 -f,--batch-file <value>        The batch file to execute
    --height <value>            arthas-client terminal height
    --width <value>             arthas-client terminal width
 -v,--verbose                   Verbose, print debug info.
    --tunnel-server <value>     The tunnel server url
    --agent-id <value>          The agent id register to tunnel server
    --stat-url <value>          The report stat url
    --select <value>            select target process by classname or
                                JARfilename
 <pid>                          Target pid

卸载: rm -rf ~/.arthas/

监控java进程

运行 java -jar arthas-boot.jar

arthas01.png

如果当前系统有多个java服务,则会显示多个进程id,选择你要监控的服务id,输入前面中括号中的数值

想要查看当前系统,是否有java服务,可以执行: ps -ef |grep java 或者 jps 如果有返回,则说明当前系统有java服务正在运行

也可以先找到系统的java服务进程id,然后直接执行:java -jar arthas-boot.jar java进程id

进入了arthas运行模式

arthas02.png

查看当前进程信息

执行 dashboard, 结束查看,按 ctrl + c

arthas03.png
  • 线程相关

    • ID 线程ID,这个id与jstack中的nativeID不同

    • NAME 线程名 GROUP 线程组名

    • PRIORITY 优先级,越大表示优先级越高

    • STATE 线程状态

    • %CPU CPU消耗比,

    • TIME 总运行时长

    • INTERRUPTED 中断状态

    • DAEMON 是否为守护进程

  • 内存相关

    • heap 堆

    • eden_space 伊甸园区间

    • survivor_space 幸存者区间

    • tenured_gen

    • nonheap

    • code_cache 代码缓存区

    • metaspace

  • GC 回收

    • gc.ps_scavenge.count

    • gc.ps_scavenge.time(ms)

    • gc.ps_marksweep.count

    • gc.ps_marksweep.time(ms)

  • Puntime

    • os.name

    • os.version

    • java.version

    • java.home

    • systemload.average

    • processors

    • uptime

获取命令帮助

执行 dashboard -h

arthas04.png

-i 更新数据间隔时长,单位毫秒,默认间隔时长为5秒

-n 根据间隔时长,获取数据,总共获取的次数

arthas中,所有命令都可以用 -h 参数,获取命令的帮助信息

其他常用命令

  • thread显示线程信息和线程堆栈信息

    • id 线程id

      • thread 15 查看线程号为15的线程信息

    • -n X 指定最忙的前X个线程,并打印堆栈

      • thread -n 5 查看当前最繁忙的前5个线程

    • -b 找出当前阻塞其他线程的线程

      • thread -b 查看当前阻塞的线程

    • -i X 指定cpu占比统计采样间隔时长,单位毫秒,默认5000ms

      • thread -i 2000 指定采样间隔时长为2秒

      • thread -n 3 -i 2000 指定间隔2秒查看最繁忙的前3个线程

    • --state 查看指定状态的线程,状态有:[NEW, TERMINATED, WAITING, RUNNABLE, TIMED_WAITING, BLOCKED]

      • thread --state RUNNABLE

  • jvm查看当前jvm信息

arthas05.png
  • JVM参数

    • THREAD 线程相关

      • COUNT JVM中活跃的线程数

      • DAEMON-COUNT 当前活跃的守护线程数

      • PEAK-COUNT 从JVM启动开始曾经活着的最大线程数

      • STARTED-COUNT 从JVM启动开始总共启动过的线程数 DEADLOCK-COUNT JVM当前死锁的线程数

    • FILE-DESCRIPTOR 文件相关

      • MAX-FILE-DESCRIPTOR-COUNT 最大可以打开的文件描述符数

      • OPEN-FILE-DESCRIPTOR-COUNT 当前打开的文件描述符数

  • sysprop 查看当前jvm的系统属性system-property

  • sysenv 查看当前jvm的环境属性 system-environment-variables

  • vmoptions 查看、更新vm诊断相关的参数

  • perfcounter 查看当前jvm的perf count信息

  • logger 查看logger信息,更新logger级别

  • mbean 查看或监控Mbean的属性信息

arthas06.png
  • sc 搜索通过JVM加载的类信息

  • sm 搜索通过JVM加载的方法信息

  • dump 已加载类的bytecode 到特定目录

  • jad 反编译指定的加载类的源码

  • trace 方法内部调用路径,并输出方法路径上的每个节点上耗时

  • stack 输出当前方法被调用的调用路径

  • tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

  • profiler 使用async-profiler生成火焰图

  • cat 打印文件内容,和linux里的cat命令类似

  • echo 打印参数,和linux里的echo命令类似

  • grep 类似传统的grep命令

  • pwd 返回当前的工作目录,和linux命令类似

  • options 选项

来源:testingpai

继续阅读