​​Java应用诊断利器——Arthas 快速入门
  xfCTXhIuZhoB 2023年11月02日 27 0

Java应用诊断利器 —— Arthas

​​Java应用诊断利器——Arthas 快速入门_JVM

一、Arthas快速入门

1.1、下载arthas

下载地址:https://github.com/alibaba/arthas/releases

​​Java应用诊断利器——Arthas 快速入门_jar_02

其中 math-game.jar 是一个官方提供的demo,arthas-boot.jar 是arthas的主要程序。

1.2、启动math-game.jar

java -jar math-game.jar

math-game是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。

1.3、启动arthas

java -jar arthas-boot.jar

Arthas会attach到目标进程上,所以在启动的时候会列出系统当前的java进程,输入需要查看的进程,就可以将Arthas attach到选择的进程上。

​​Java应用诊断利器——Arthas 快速入门_JVM_03

Arthas启动成功后,界面如下图所示

​​Java应用诊断利器——Arthas 快速入门_JVM_04

与此同时,官方也提供了web界面供大家使用,通过访问 http://localhost:3658 可以进入Arthas 界面

​​Java应用诊断利器——Arthas 快速入门_java_05


二、Arthas基础命令

2.1、基础命令

1、help

查看命令帮助信息

​​Java应用诊断利器——Arthas 快速入门_JVM_06

2、cat

查看文件内容,和linux里的cat命令类似,查看arthas目录下的arthas.properties

​​Java应用诊断利器——Arthas 快速入门_JVM_07

3、grep

​​Java应用诊断利器——Arthas 快速入门_jar_08

4、pwd

​​Java应用诊断利器——Arthas 快速入门_java_09

5、cls

查看当前会话的信息

​​Java应用诊断利器——Arthas 快速入门_jar_10

version

输出当前目标 Java 进程所加载的 Arthas 版本号

​​Java应用诊断利器——Arthas 快速入门_java_11

history

​​Java应用诊断利器——Arthas 快速入门_JVM_12

打印命令历史

quit

作用

退出当前 Arthas 客户端,其他 Arthas 客户端不受影响

stop

作用

关闭 Arthas 服务端,所有 Arthas 客户端全部退出

效果

keymap

作用

Arthas快捷键列表及自定义快捷键

​​Java应用诊断利器——Arthas 快速入门_JVM_13

Arthas 命令行快捷键

快捷键说明

命令说明

ctrl + a

跳到行首

ctrl + e

跳到行尾

ctrl + f

向前移动一个单词

ctrl + b

向后移动一个单词

键盘左方向键

光标向前移动一个字符

键盘右方向键

光标向后移动一个字符

键盘下方向键

下翻显示下一个命令

键盘上方向键

上翻显示上一个命令

ctrl + h

向后删除一个字符

ctrl + shift + /

向后删除一个字符

ctrl + u

撤销上一个命令,相当于清空当前行

ctrl + d

删除当前光标所在字符

ctrl + k

删除当前光标到行尾的所有字符

ctrl + i

自动补全,相当于敲TAB

ctrl + j

结束当前行,相当于敲回车

ctrl + m

结束当前行,相当于敲回车

  • 任何时候 tab 键,会根据当前的输入给出提示
  • 命令后敲 - 或 -- ,然后按 tab 键,可以展示出此命令具体的选项

后台异步命令相关快捷键

  • ctrl + c: 终止当前命令
  • ctrl + z: 挂起当前命令,后续可以 bg/fg 重新支持此命令,或 kill 掉
  • ctrl + a: 回到行首
  • ctrl + e: 回到行尾

小结

命令

说明

session

显示当前会话的信息:进程的ID,会话ID

reset

重置类的增强,服务器关闭的时候会自动重置所有的类

version

显示arthas版本号

quit

退出当前会话,不会影响其它的会话

stop

退出arthas服务器,所有的会话都停止

keymap

获取快捷键


1、dashboard

当前系统的实时数据面板,如HTTP请求的qps, runtime, 错误数, 线程池信息等等。

输入 Q 或者 Ctrl+C 可以退出dashboard命令。

数据说明

  • ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应。
  • NAME: 线程名
  • GROUP: 线程组名
  • PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高
  • STATE: 线程的状态
  • CPU%: 线程的cpu使用率。比如采样间隔1000ms,某个线程的增量cpu时间为100ms,则cpu使用率=100/1000=10%
  • DELTA_TIME: 上次采样之后线程运行增量CPU时间,数据格式为秒
  • TIME: 线程运行总CPU时间,数据格式为分:秒
  • INTERRUPTED: 线程当前的中断位状态
  • DAEMON: 是否是daemon线程

JVM内部线程

Java 8之后支持获取JVM内部线程CPU时间,这些线程只有名称和CPU时间,没有ID及状态等信息(显示ID为-1)。 通过内部线程可以观测到JVM活动,如GC、JIT编译等占用CPU情况,方便了解JVM整体运行状况。

  • 当JVM 堆(heap)/元数据(metaspace)空间不足或OOM时,可以看到GC线程的CPU占用率明显高于其他的线程。
  • 当执行trace/watch/tt/redefine等命令后,可以看到JIT线程活动变得更频繁。因为JVM热更新class字节码时清除了此class相关的JIT编译结果,需要重新编译。

JVM内部线程包括下面几种:

  • JIT编译线程: 如 C1 CompilerThread0, C2 CompilerThread0
  • GC线程: 如GC Thread0, G1 Young RemSet Sampling
  • 其它内部线程: 如VM Periodic Task Thread, VM Thread, Service Thread

运行环境


2、thread

查看当前线程信息,查看线程的堆栈

参数说明

参数名称

参数说明

id

线程id

[n:]

指定最忙的前N个线程并打印堆栈

[b]

找出当前阻塞其他线程的线程

[i <value>]

指定cpu使用率统计的采样间隔,单位为毫秒,默认值为200

[--all]

显示所有匹配的线程

​​Java应用诊断利器——Arthas 快速入门_jar_14

​​Java应用诊断利器——Arthas 快速入门_java_15


查看死锁

thread -b

thread -i, 指定采样时间间隔

  • thread-i1000 : 统计最近1000ms内的线程CPU时间。
  • thread-n3-i1000 : 列出1000ms内最忙的3个线程栈


jvm

查看当前 JVM 的信息

​​Java应用诊断利器——Arthas 快速入门_jar_16


sysprop

查看和修改JVM的系统属性

​​Java应用诊断利器——Arthas 快速入门_JVM_17


查看单个属性

支持通过TAB键自动补全

sysprop java.version

​​Java应用诊断利器——Arthas 快速入门_JVM_18


修改单个属性


sysprop user.country US


​​Java应用诊断利器——Arthas 快速入门_JVM_19

sysenv


sysenv:查看当前JVM的环境属性(SystemEnvironmentVariables)

​​Java应用诊断利器——Arthas 快速入门_jar_20

查看单个环境变量

[arthas@33676]$ sysenv USER

​​Java应用诊断利器——Arthas 快速入门_jar_21

vmoption

查看,更新VM诊断相关的参数

​​Java应用诊断利器——Arthas 快速入门_jar_22

查看指定的option

vmoption PrintGC

​​Java应用诊断利器——Arthas 快速入门_JVM_23

修改指定的option

vmoption PrintGC true

​​Java应用诊断利器——Arthas 快速入门_java_24


getstatic(不推荐)

通过getstatic命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name


getstatic java.util.HashMap DEFAULT_LOAD_FACTOR

​​Java应用诊断利器——Arthas 快速入门_jar_25


ognl

执行ognl表达式

调用静态函数:

ognl '@java.time.LocalDateTime@now()'

​​Java应用诊断利器——Arthas 快速入门_java_26

获取静态类的静态字段:

ognl '@java.util.ArrayList@DEFAULT_CAPACITY'

​​Java应用诊断利器——Arthas 快速入门_jar_27

执行静态方法

ognl '#value=@java.time.LocalDate@of(2022,1,1)'

​​Java应用诊断利器——Arthas 快速入门_jar_28

执行多行表达式,赋值给临时变量,返回一个List:

ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'

​​Java应用诊断利器——Arthas 快速入门_java_29


perfcounter——查看当前 JVM 的Perf Counter信息

logger——查看和修改logger

mbean——查看 Mbean 的信息

heapdump——dump java heap, 类似jmap命令的heap dump功能

vmtool——从jvm里查询对象,执行forceGc

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   110   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
xfCTXhIuZhoB