JVM监控及诊断工具GUI篇之Arthas(四):monitor、watch、trace相关指令
目录
一、概述
二、Arthas之monitor指令
三、Arthas之watch 指令
四、Arthas之trace指令
五、Arthas之stack指令
六、Arthas之tt指令
一、概述
本文将总结Arthas中monitor、watch、trace相关监控指令,请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 stop 或将增强过的类执行 reset 命令。
二、Arthas之monitor指令
- monitor :方法执行监控,调用次数、执行时间、失败率。monitor对匹配 class-pattern/method-pattern/condition-express的类、方法的调用进行监控。
monitor 命令是一个非实时返回命令。实时返回命令是输入之后立即返回,而非实时返回的命令,则是不断的等待目标 Java 进程返回信息,直到用户输入 Ctrl+C 为止。
服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何Arthas命令不会引起原有业务逻辑的改变。
monitor监控维度:
监控项 |
说明 |
timestamp |
时间戳 |
class |
Java类 |
method |
方法(构造方法、普通方法) |
total |
调用次数 |
success |
成功次数 |
fail |
失败次数 |
rt |
平均RT |
fail-rate |
失败率 |
-c :统计周期,默认值为120秒
[arthas@11896]$ monitor -c 5 com.wsh.Stu <init>
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 262 ms, listenerId: 1timestamp class method total success fail avg-rt( fail-rams) te
------------------------------------------------------------------------------------------------------------------2021-09-18 08:40 com.wsh.Stu <init> 10 10 0 0.27 0.00%:55timestamp class method total success fail avg-rt( fail-rams) te
------------------------------------------------------------------------------------------------------------------2021-09-18 08:41 com.wsh.Stu <init> 9 9 0 0.05 0.00%
三、Arthas之watch 指令
- watch :方法执行观测,让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。
参数说明:
watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象。
参数名称 |
参数说明 |
class-pattern |
类名表达式匹配 |
method-pattern |
方法名表达式匹配 |
express |
观察表达式,默认值:{params, target, returnObj} |
condition-express |
条件表达式 |
[b] |
在方法调用之前观察 |
[e] |
在方法异常之后观察 |
[s] |
在方法返回之后观察 |
[f] |
在方法结束之后(正常返回和异常返回)观察 |
[E] |
开启正则表达式匹配,默认为通配符匹配 |
[x:] |
指定输出结果的属性遍历深度,默认为 1 |
[arthas@11896]$ watch com.wsh.Stu <init>
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 42 ms, listenerId: 2
method=com.wsh.Stu.<init> location=AtExit
ts=2021-09-18 08:43:39; [cost=0.2545ms] result=@ArrayList[@Object[][isEmpty=true;size=0],@Stu[com.wsh.Stu@6d21714c],null,
]
method=com.wsh.Stu.<init> location=AtExit
ts=2021-09-18 08:43:40; [cost=0.0565ms] result=@ArrayList[@Object[][isEmpty=true;size=0],@Stu[com.wsh.Stu@108c4c35],null,
]
-x :指定输岀结果的属性遍历深度,默认为0
//通过watch查看init方法的参数、返回值
[arthas@11896]$ watch com.wsh.Stu <init> "{params,returnObj}" -x 2
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 33 ms, listenerId: 4
method=com.wsh.Stu.<init> location=AtExit
ts=2021-09-18 08:45:06; [cost=0.1594ms] result=@ArrayList[@Object[][isEmpty=true;size=0],null,
]
method=com.wsh.Stu.<init> location=AtExit
ts=2021-09-18 08:45:07; [cost=0.0213ms] result=@ArrayList[@Object[][isEmpty=true;size=0],null,
]
method=com.wsh.Stu.<init> location=AtExit
ts=2021-09-18 08:45:07; [cost=0.0223ms] result=@ArrayList[@Object[][isEmpty=true;size=0],null,
]
更多watch使用案例可参考watch — Arthas 3.5.4 文档
四、Arthas之trace指令
- trace:方法内部调用路径,并输出方法路径上的每个节点上耗时。trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
参数说明:
参数名称 |
参数说明 |
class-pattern |
类名表达式匹配 |
method-pattern |
方法名表达式匹配 |
condition-express |
条件表达式 |
[E] |
开启正则表达式匹配,默认为通配符匹配 |
[n:] |
命令执行次数 |
#cost |
方法执行耗时 |
[arthas@11896]$ trace com.wsh.Stu <init>
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 92 ms, listenerId: 5
`---ts=2021-09-18 08:46:53;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2`---[0.1465ms] com.wsh.Stu:<init>()`---ts=2021-09-18 08:46:53;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2`---[0.0227ms] com.wsh.Stu:<init>()`---ts=2021-09-18 08:46:54;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2`---[0.0286ms] com.wsh.Stu:<init>()
-n :执行次数限制
[arthas@11896]$ trace -n 2 com.wsh.Stu <init>
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 35 ms, listenerId: 6
`---ts=2021-09-18 08:47:46;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2`---[0.1139ms] com.wsh.Stu:<init>()`---ts=2021-09-18 08:47:47;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2`---[0.0186ms] com.wsh.Stu:<init>()Command execution times exceed limit: 2, so command will exit. You can set it with -n option.
更多trace命令使用可参考trace — Arthas 3.5.4 文档
五、Arthas之stack指令
- stack:输出当前方法被调用的调用路径。很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。
[arthas@11896]$ stack com.wsh.Stu <init>
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 38 ms, listenerId: 7
ts=2021-09-18 08:48:45;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2@com.wsh.Stu.<init>()at com.wsh.GCTest.main(GCTest.java:10)ts=2021-09-18 08:48:45;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2@com.wsh.Stu.<init>()at com.wsh.GCTest.main(GCTest.java:10)ts=2021-09-18 08:48:46;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2@com.wsh.Stu.<init>()at com.wsh.GCTest.main(GCTest.java:10)
六、Arthas之tt指令
- tt :方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测(TimeTunnel )。
[arthas@11896]$ tt -t -n 3 com.wsh.Stu <init>
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 39 ms, listenerId: 8INDEX TIMESTAMP COST(ms IS-RE IS-EX OBJECT CLASS METHOD) T P
------------------------------------------------------------------------------------------------------------------1000 2021-09-18 08:50 0.1658 true false 0x17d10166 Stu <init>:361001 2021-09-18 08:50 0.0155 true false 0x4f8e5cde Stu <init>:371002 2021-09-18 08:50 0.0149 true false 0x504bae78 Stu <init>:37
Command execution times exceed limit: 3, so command will exit. You can set it with -n option.
更多tt命令使用可参考tt — Arthas 3.5.4 文档。
JVM监控及诊断工具GUI篇之Arthas(四):monitor、watch、trace相关指令相关推荐
- 性能监控与调优篇之【3. JVM 监控及诊断工具-GUI 篇】
文章目录 3. JVM 监控及诊断工具-GUI 篇 3.1. 工具概述 3.2. JConsole 3.3. Visual VM 3.4. Eclipse MAT 3.5. JProfiler 3.6 ...
- JVM监控及诊断工具-GUI篇
3.JVM监控及诊断工具-GUI篇 一.工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系.各方 ...
- 20.JVM监控以及诊断工具-GUI篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 20. JVM监控及诊断工具-GUI篇 20.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相 ...
- 干货满满【JVM监控及诊断工具-GUI篇】
[JVM监控及诊断工具-GUI篇] 3.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系 ...
- JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇
二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...
- 第24章 JVM监控及诊断工具-GUI篇
第24章 JVM监控及诊断工具-GUI篇 来自尚硅谷宋红康老师讲解的JVM:bilibili链接 1 工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局 ...
- 15、JVM监控及诊断工具-GUI篇
文章目录 第1章.工具概述 第2章.jConsole 1.基本概述 2.启动 3.三种连接方式 [1]Local [2]Remote [3]Advanced 4.主要作用 第3章.Visual VM ...
- JVM(二十二) -- 性能监控与调优(三) -- JVM监控及诊断工具--GUI篇
1.工具概述 1.1 图形化总和诊断工具: JDK自带的工具 第三方工具 2. jConsole(了解) 从java5开始,在JDK中自带的java监控和管理控制台. 用于对JVM中内存.线程和类等的 ...
- <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- Day357358359360.JVM监控及诊断工具-GUI -JVM
JVM监控及诊断工具-GUI 实际中,你下面有1-2款会用即可 一.工具概述 二.JConsole 了解 1.基本概述 2.启动 在jdk安装目录中找到jconsole.exe,双击该可执行文件就可以 ...
最新文章
- 审稿人眼中的好论文到底长什么样?
- Sqlserver数据库类型介绍,可作为参考书
- Struts2拦截器(Interceptor)原理详解
- 真实案例引起的对系统健壮性的思考
- 从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念
- javaTemplates-学习笔记四
- 【神经网络】给初学者们讲解人工神经网络(ANN)
- axios Post无法传递数据的解决方案
- python设置excel格式_Python使用xlwt写excel并设置写入格式
- matlab色差,计算CMC色差公式的matlab程序
- python飞机大战源码素材包_Python飞机大战实战项目案例
- 希尔伯特变换 matlab,MATLAB的实现Hilbert变换程序_matlab
- 纯CSS实现点击一个元素,背景颜色切换
- 《金融的本质》书中的精髓:金融危机是如何产生的?以及美联储是如何应对金融危机的?
- 腾讯云商用密码合规解决方案亮相2021商用密码应用创新高端研讨会,高效护航企业云端数据安全
- 交叉验证(s折、分层、留一法)
- 【yiyi挑战】2.1搜索
- Win10 64位下GPU版本MXNet+Tensorflow 1.3.0的安装
- 重装系统后附加带区卷
- 我的新概念英语第四册
热门文章
- linux中副规则_linux中命名规则_学习笔记
- shell逻辑运算符优先级_linux shell 逻辑运算符、逻辑表达式详解
- 翻译:如何理解梯度下降算法Gradient Descent algorithm
- java获取weblogic路径_weblogic下java web项目获取根路径
- LeetCode--Reverse Integer(整数反转)Python
- 316.去除重复字母
- Mysql数据恢复有哪几种_MYSQL 数据恢复有哪些
- python redis模块常用_python redis 模块
- 【自然语言处理系列】预训练模型原理和实践综述 | 附汇报PPT原稿和18篇论文
- 浅谈算法和数据结构: 四 快速排序