文章目录
- [1. dashboard](#1. dashboard)
- [2. thread线程相关](#2. thread线程相关)
- [3. jvm](#3. jvm)
- [4. sysprop](#4. sysprop)
- [5. 小结](#5. 小结)
- [6. sysenv](#6. sysenv)
- [7. vmoption](#7. vmoption)
- [8. getstatic](#8. getstatic)
- [9. ognl](#9. ognl)
- [10. 小结](#10. 小结)
1. dashboard
- 作用:显示当前系统的实时数据面板,按q或ctrl+c退出


数据说明
- ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应
- NAME: 线程名
- GROUP: 线程组名
- PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高
- STATE: 线程的状态
- CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。
- TIME: 线程运行总时间,数据格式为
分:秒
- INTERRUPTED: 线程当前的中断位状态
- DAEMON: 是否是daemon线程

2. thread线程相关
- 作用:查看当前 JVM 的线程堆栈信息
- 参数说明
参数名称 | 参数说明 |
---|---|
数字 | 线程id |
[n:] | 指定最忙的前N个线程并打印堆栈 |
[b] | 找出当前阻塞其他线程的线程 |
[i <value>] | 指定cpu占比统计的采样间隔,单位为毫秒 |
- 举例:展示当前最忙的前3个线程并打印堆栈
bash
thread -n 3
如:Tomcat线程中前三个最忙的。可以看到第一个线程cpu占用到100%

- 当没有参数时,显示所有线程的信息
bash
thread

- 显示1号线程的运行堆栈
bash
thread 1

- 找出当前阻塞其他线程的线程,有时候我们发现应用卡住了, 通常是由于某个线程拿住了某个锁, 并且其他线程都在等待这把锁造成的。 为了排查这类问题, arthas提供了thread -b, 一键找出那个罪魁祸首。
bash
thread -b

- 指定采样时间间隔,每过1000毫秒采样,显示最占时间的3个线程
bash
thread -i 1000 -n 3

- 查看处于等待状态的线程
bash
thread --state WAITING

3. jvm
- 作用:查看当前 JVM 的信息

THREAD相关
COUNT
: JVM当前活跃的线程数DAEMON-COUNT
: JVM当前活跃的守护线程数PEAK-COUNT
: 从JVM启动开始曾经活着的最大线程数STARTED-COUNT
: 从JVM启动开始总共启动过的线程次数DEADLOCK-COUNT
: JVM当前死锁的线程数
文件描述符相关
MAX-FILE-DESCRIPTOR-COUNT
:JVM进程最大可以打开的文件描述符数OPEN-FILE-DESCRIPTOR-COUNT
:JVM当前打开的文件描述符数
4. sysprop
- 作用:查看和修改JVM的系统属性
- 查看所有属性
bash
sysprop
bash
[arthas@896915]$ sysprop
KEY VALUE
--------------------------------------------------------------------------------
awt.toolkit sun.awt.X11.XToolkit
file.encoding. sun.io
pkg
java.specifica 1.8
tion.version
sun.cpu.isalis
t
sun.jnu.encodi UTF-8
ng
java.class.pat math-game.jar
h
java.vm.vendor Oracle Corporation
sun.arch.data. 64
model
java.vendor.ur http://java.oracle.com/
l
user.timezone Asia/Shanghai
os.name Linux
java.vm.specif 1.8
ication.versio
n
user.country CN
sun.java.launc SUN_STANDARD
her
sun.boot.libra /www/server/java/jdk1.8.0_371/jre/lib/amd64
ry.path
sun.java.comma math-game.jar
nd
sun.cpu.endian little
user.home /root
user.language zh
java.specifica Oracle Corporation
tion.vendor
java.home /www/server/java/jdk1.8.0_371/jre
file.separator /
line.separator
java.vm.specif Oracle Corporation
ication.vendor
java.specifica Java Platform API Specification
tion.name
java.awt.graph sun.awt.X11GraphicsEnvironment
icsenv
sun.boot.class /www/server/java/jdk1.8.0_371/jre/lib/resources.jar:/www/serve
.path r/java/jdk1.8.0_371/jre/lib/rt.jar:/www/server/java/jdk1.8.0_3
71/jre/lib/jsse.jar:/www/server/java/jdk1.8.0_371/jre/lib/jce.
jar:/www/server/java/jdk1.8.0_371/jre/lib/charsets.jar:/www/se
rver/java/jdk1.8.0_371/jre/lib/jfr.jar:/www/server/java/jdk1.8
.0_371/jre/classes
sun.management HotSpot 64-Bit Tiered Compilers
.compiler
java.runtime.v 1.8.0_371-b11
ersion
user.name root
path.separator :
os.version 5.10.134-16.3.al8.x86_64
java.endorsed. /www/server/java/jdk1.8.0_371/jre/lib/endorsed
dirs
java.runtime.n Java(TM) SE Runtime Environment
ame
file.encoding UTF-8
java.vm.name Java HotSpot(TM) 64-Bit Server VM
java.vendor.ur http://bugreport.sun.com/bugreport/
l.bug
java.io.tmpdir /tmp
java.version 1.8.0_371
user.dir /root
os.arch amd64
java.vm.specif Java Virtual Machine Specification
ication.name
java.awt.print sun.print.PSPrinterJob
erjob
sun.os.patch.l unknown
evel
java.library.p /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
ath
java.vm.info mixed mode
java.vendor Oracle Corporation
java.vm.versio 25.371-b11
n
java.specifica 4
tion.maintenan
ce.version
java.ext.dirs /www/server/java/jdk1.8.0_371/jre/lib/ext:/usr/java/packages/l
ib/ext
sun.io.unicode UnicodeLittle
.encoding
java.class.ver 52.0
sion
- 查看单个属性,支持通过tab补全
bash
sysprop java.version

- 修改单个属性
bash
sysprop user.country
user.country=US
sysprop user.country CN
Successfully changed the system property.
user.country=CN

5. 小结
jvm相关命令 | 说明 |
---|---|
dashboard | 显示线程,内存,GC,系统环境等信息 |
thread | 显示线程信息 |
jvm | 与JVM相关的信息 |
sysprop | 显示系统属性信息,也可以修改某个属性 |
6. sysenv
- 作用:查看当前JVM的环境属性(
System Environment Variables
) - 查看所有环境变量
bash
sysenv
bash
[arthas@896915]$ sysenv
KEY VALUE
--------------------------------------------------------------------------------
BASH_FUNC_whic () { ( alias;
h%% eval ${which_declare} ) | /usr/bin/which --tty-only --read-al
ias --read-functions --show-tilde --show-dot $@
}
CLASSPATH .:/www/server/java/jdk1.8.0_371/lib/tools.jar
DBUS_SESSION_B unix:path=/run/user/0/bus
US_ADDRESS
GOPATH /root/goprojects
GOROOT /opt/go
HISTCONTROL ignoredups
HISTSIZE 1000
HOME /root
HOSTNAME iZwz9a93gvuoloyla40zjyZ
JAVA_HOME /www/server/java/jdk1.8.0_371
LANG zh_CN.UTF-8
LESSOPEN ||/usr/bin/lesspipe.sh %s
LOGNAME root
LS_COLORS rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;
33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43
:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tg
z=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=
01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=0
1;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*
.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzs
t=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=0
1;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;
31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31
:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.
swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.m
jpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.
pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.ti
f=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mn
g=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v
=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=
01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01
;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;3
5:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.
xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.og
x=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=
01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=0
1;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;
36:*.xspf=01;36:
MAIL /var/spool/mail/root
PATH /www/server/java/jdk1.8.0_371/bin:/opt/go/bin:/usr/local/sbin:
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD /root
SHELL /bin/bash
SHLVL 1
SSH_CLIENT 120.231.214.28 23833 22
SSH_CONNECTION 120.231.214.28 23833 10.20.229.0 22
SSH_TTY /dev/pts/0
S_COLORS auto
TERM xterm
USER root
XDG_RUNTIME_DI /run/user/0
R
XDG_SESSION_ID 178
_ /www/server/java/jdk1.8.0_371/bin/java
which_declare declare -f
- 查看单个环境变量
bash
sysenv USER
bash
[arthas@896915]$ sysenv USER
KEY VALUE
--------------------------------------------------------------------------------
USER root
7. vmoption
-
作用:查看,更新VM诊断相关的参数
-
查看所有的选项
bash
vmoption

- 查看指定的选项
bash
vmoption PrintGCDetails

- 更新指定的选项
bash
vmoption PrintGCDetails true

8. getstatic
- 作用:通过getstatic命令可以方便的查看类的静态属性
- 语法
bash
getstatic 类名 属性名
- 举例:
bash
显示demo.MathGame类中静态属性random
getstatic demo.MathGame random

9. ognl
- 作用:执行ognl表达式,这是从3.0.5版本新增的功能
- OGNL语法
bash
https://commons.apache.org/dormant/commons-ognl/language-guide.html

- 参数说明
参数名称 | 参数说明 |
---|---|
express | 执行的表达式 |
[c:] |
执行表达式的 ClassLoader 的 hashcode,默认值是SystemClassLoader |
[x] | 结果对象的展开层次,默认值1 |
- 举例
bash
调用静态函数
ognl '@[email protected]("hello")'
获取静态类的静态字段
ognl '@demo.MathGame@random'
执行多行表达式,赋值给临时变量,返回一个List
ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'

10. 小结
jvm相关命令 | 说明 |
---|---|
sysenv | 查看JVM环境变量的值 |
vmoption | 查看JVM中选项,可以修改 |
getstatic | 获取静态成员变量 |
ognl | 执行一个ognl表达式 |