介绍
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
如果当前系统有多个java服务,则会显示多个进程id,选择你要监控的服务id,输入前面中括号中的数值
想要查看当前系统,是否有java服务,可以执行:
ps -ef |grep java
或者jps
如果有返回,则说明当前系统有java服务正在运行也可以先找到系统的java服务进程id,然后直接执行:
java -jar arthas-boot.jar java进程id
进入了arthas运行模式
查看当前进程信息
执行 dashboard
, 结束查看,按 ctrl + c
- 线程相关
- 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
-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
- id 线程id
- jvm查看当前jvm信息
- 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 当前打开的文件描述符数
- THREAD 线程相关
- sysprop 查看当前jvm的系统属性system-property
- sysenv 查看当前jvm的环境属性 system-environment-variables
- vmoptions 查看、更新vm诊断相关的参数
- perfcounter 查看当前jvm的perf count信息
- logger 查看logger信息,更新logger级别
- mbean 查看或监控Mbean的属性信息
- 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.com!
注册 关于