文章目錄
- 1. dashboard
- 2. thread線程相關
- 3. jvm
- THREAD相關
- 文件描述符相關
- 4. sysprop
- 5. 小結
- 6. sysenv
- 7. vmoption
- 8. getstatic
- 9. ognl
- 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個線程并打印堆棧
thread -n 3
如:Tomcat線程中前三個最忙的。可以看到第一個線程cpu占用到100%
- 當沒有參數時,顯示所有線程的信息
thread
- 顯示1號線程的運行堆棧
thread 1
- 找出當前阻塞其他線程的線程,有時候我們發現應用卡住了, 通常是由于某個線程拿住了某個鎖, 并且其他線程都在等待這把鎖造成的。 為了排查這類問題, arthas提供了thread -b, 一鍵找出那個罪魁禍首。
thread -b
- 指定采樣時間間隔,每過1000毫秒采樣,顯示最占時間的3個線程
thread -i 1000 -n 3
- 查看處于等待狀態的線程
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的系統屬性
- 查看所有屬性
sysprop
[arthas@896915]$ syspropKEY 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補全
sysprop java.version
- 修改單個屬性
sysprop user.country
user.country=USsysprop 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
) - 查看所有環境變量
sysenv
[arthas@896915]$ sysenvKEY 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
- 查看單個環境變量
sysenv USER
[arthas@896915]$ sysenv USERKEY VALUE
--------------------------------------------------------------------------------USER root
7. vmoption
-
作用:查看,更新VM診斷相關的參數
-
查看所有的選項
vmoption
- 查看指定的選項
vmoption PrintGCDetails
- 更新指定的選項
vmoption PrintGCDetails true
8. getstatic
- 作用:通過getstatic命令可以方便的查看類的靜態屬性
- 語法
getstatic 類名 屬性名
- 舉例:
顯示demo.MathGame類中靜態屬性random
getstatic demo.MathGame random
9. ognl
- 作用:執行ognl表達式,這是從3.0.5版本新增的功能
- OGNL語法
https://commons.apache.org/dormant/commons-ognl/language-guide.html
- 參數說明
參數名稱 | 參數說明 |
---|---|
express | 執行的表達式 |
[c:] | 執行表達式的 ClassLoader 的 hashcode,默認值是SystemClassLoader |
[x] | 結果對象的展開層次,默認值1 |
- 舉例
調用靜態函數
ognl '@java.lang.System@out.println("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表達式 |