目录

一、概述

二、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相关指令相关推荐

  1. 性能监控与调优篇之【3. JVM 监控及诊断工具-GUI 篇】

    文章目录 3. JVM 监控及诊断工具-GUI 篇 3.1. 工具概述 3.2. JConsole 3.3. Visual VM 3.4. Eclipse MAT 3.5. JProfiler 3.6 ...

  2. JVM监控及诊断工具-GUI篇

    3.JVM监控及诊断工具-GUI篇 一.工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系.各方 ...

  3. 20.JVM监控以及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 20. JVM监控及诊断工具-GUI篇 20.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相 ...

  4. 干货满满【JVM监控及诊断工具-GUI篇】

    [JVM监控及诊断工具-GUI篇] 3.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系 ...

  5. JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇

    二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...

  6. 第24章 JVM监控及诊断工具-GUI篇

    第24章 JVM监控及诊断工具-GUI篇 来自尚硅谷宋红康老师讲解的JVM:bilibili链接 1 工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局 ...

  7. 15、JVM监控及诊断工具-GUI篇

    文章目录 第1章.工具概述 第2章.jConsole 1.基本概述 2.启动 3.三种连接方式 [1]Local [2]Remote [3]Advanced 4.主要作用 第3章.Visual VM ...

  8. JVM(二十二) -- 性能监控与调优(三) -- JVM监控及诊断工具--GUI篇

    1.工具概述 1.1 图形化总和诊断工具: JDK自带的工具 第三方工具 2. jConsole(了解) 从java5开始,在JDK中自带的java监控和管理控制台. 用于对JVM中内存.线程和类等的 ...

  9. <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  10. Day357358359360.JVM监控及诊断工具-GUI -JVM

    JVM监控及诊断工具-GUI 实际中,你下面有1-2款会用即可 一.工具概述 二.JConsole 了解 1.基本概述 2.启动 在jdk安装目录中找到jconsole.exe,双击该可执行文件就可以 ...

最新文章

  1. 审稿人眼中的好论文到底长什么样?
  2. Sqlserver数据库类型介绍,可作为参考书
  3. Struts2拦截器(Interceptor)原理详解
  4. 真实案例引起的对系统健壮性的思考
  5. 从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念
  6. javaTemplates-学习笔记四
  7. 【神经网络】给初学者们讲解人工神经网络(ANN)
  8. axios Post无法传递数据的解决方案
  9. python设置excel格式_Python使用xlwt写excel并设置写入格式
  10. matlab色差,计算CMC色差公式的matlab程序
  11. python飞机大战源码素材包_Python飞机大战实战项目案例
  12. 希尔伯特变换 matlab,MATLAB的实现Hilbert变换程序_matlab
  13. 纯CSS实现点击一个元素,背景颜色切换
  14. 《金融的本质》书中的精髓:金融危机是如何产生的?以及美联储是如何应对金融危机的?
  15. 腾讯云商用密码合规解决方案亮相2021商用密码应用创新高端研讨会,高效护航企业云端数据安全
  16. 交叉验证(s折、分层、留一法)
  17. 【yiyi挑战】2.1搜索
  18. Win10 64位下GPU版本MXNet+Tensorflow 1.3.0的安装
  19. 重装系统后附加带区卷
  20. 我的新概念英语第四册

热门文章

  1. linux中副规则_linux中命名规则_学习笔记
  2. shell逻辑运算符优先级_linux shell 逻辑运算符、逻辑表达式详解
  3. 翻译:如何理解梯度下降算法Gradient Descent algorithm
  4. java获取weblogic路径_weblogic下java web项目获取根路径
  5. LeetCode--Reverse Integer(整数反转)Python
  6. 316.去除重复字母
  7. Mysql数据恢复有哪几种_MYSQL 数据恢复有哪些
  8. python redis模块常用_python redis 模块
  9. 【自然语言处理系列】预训练模型原理和实践综述 | 附汇报PPT原稿和18篇论文
  10. 浅谈算法和数据结构: 四 快速排序