Watch 命令的演示案例 | 学习笔记

简介: 快速学习 Watch 命令的演示案例

开发者学堂课程【线上问题排查利器 Alibaba Arthas(下)Watch 命令的演示案例】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/747/detail/13203


Watch 命令的演示案例


内容介绍:

一、演示案例

二、小结


一、案例演示

观察方法入参,对比前一个例子,返回值为空(事件点为方法执行前,因此获取不到返回值)

清除后只需在第一个例子的代码基础上修改一点加一个-b的参数,-b就是监控方法的入参,要在方法执行前监控,然后回车执行三次后结束。

image.png

此时可以发现入参有整数有负数,负数返回值为空,但正数也为空,因为是在方法执行前进行的监视,所以没有获得返回值。

观察当前对象中的属性,如果想查看方法运行前后,当前对象中的属性,可以使用 target 关键字,代表当前对象。

比方说想要看对象是什么样子的,还是以上面代码为例,我们只需要在方法前加一个target,然后回车就可以了。执行两次为例,可以发现target是代表了调用方法对象本身,这个方法对象本身result后面显示的是数学游戏类的对象里面的一些东西,里面主要显示了两个程序变量,第一个是random…看源码,在源码中我们可以看到,一个是random,一个是整数的illegal非法的参数,所以是观察当前对象中所有的属性。

image.png

回到现在程序我们可以看到,就两个属性,设置的级别为两级,所以可以看到random下一级的所有属性,同样也能看到它的值2233。

image.png

运行第二次,通过给的参数,我们可以获得这个对象当中的所有的属性,如果想要看其中的某一个属性,现将通过第四个例子讲解。

image.png

使用 target . field _ name 访问当前对象的某个属性

某个属性的写法就是点上这个属性名即可,只需要在target里面点上某个属性名,比如说看illegal ArgumentCount的属性名,将他的名字拷贝到target里面,因为只看这一个属性可以将-b的这些参数删掉,然后回车。

此时会发现显示的是illegal ArgumentCount这个属性,同样也是隔一秒钟调用一次,以上就是第四个例子。

image.png

同时观察方法调用前和方法返回后的结果,这里只调用两次,参数里﹣ n 2表示只执行两次。不指定次数的话会不断地在执行。

在前面方法的基础上改一下,要显示三个参数,显示方法调用前和方法调用后的参数值,

params 是参数, returnObj是返回值,加一个target代表当前对象,然后在这里面可以在指定其他的参数,-b是调用前,-x是显示的深度,-s表示方法调用后的一个监控点,再加一个-n2表示执行两次,按回车看一下执行结果:结果有三个,第一个是输入参数整数,第二个是代表对象的所有属性,第三个就是返回值,我们可以看到方法前的返回值是没有的,

image.png

方法后:

image.png

方法后第一个是参数,第二个是对象,第三哥代表的是返回值,返回值质因数分解出5,5,47,71.最后还有一个提示命令执行的次数最多两次,所以命令就此退出,可以通过-n的选项来查看。在Arthas当中,每个方法都可以用-h作为参数,这样就可以看到方法的用途,以及每个参数的解释,会发现每个参数的作用写的非常清楚,比如像s--success,就像上节课中猜测的一样(除了f--finish)

image.png

条件表达式的例子,输出第1参数小于0的情况。

通过条件表达式的方式,来进行过滤,输出第一个参数小于0的情况。大于0的不输出来,只输出小于0的情况。

回到最初,我们可以采用宿主,代表第0个参数就可以,因为我们确定了他只有一个参数,然后用target作为监视目标,依次是类名,方法名,还有ognl表达式,第四个参数指定‘params[0]<0’,注意params是复数,输好后回车。发现不是一秒一次了,原因是可能出现了大于0的情况但不会显示出来,所以不再是一秒钟一次,可能是几秒钟一次碰到一个小于0的。

正确代码如下:

[arthas @3670]$ watch demo . MathGame primeFactors "{ params [ 0], target }”" params [0]< 0 "

image.png

我们监视两个东西,第一个是入参,第二个是对象本身。我们没有指定它的深度,没有指定-x的参数所以深度默认值为1级,看不到里面的东西,而且所有的入参都是负数。说明我们的过滤条件起了作用。以上就是我们的全部例子。


二、小结:

参数、参数说明

image.png

[ b ]begin 监视方法执行前的情况

[ e ]exception 监视出现异常的情况

[ s ]success 执行成功的情况

[ f ]finish 执行完毕的情况,包含成功或失败

-x指定深度,-n指定执行次数…

相关文章
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
Arthas 测试技术 网络安全
The telnet port 3658 is used by process
是否在本地使用Arthas的时候,遇到The telnet port 3658 is used by process 34725 instead of target process 44848, you will connect to an unexpected process的异常,其实解决方法很简单。
2518 0
The telnet port 3658 is used by process
|
SQL 数据库 数据库管理
PowerDesigner16:导入SQL脚本、显示中文注释
PowerDesigner16:导入SQL脚本、显示中文注释
PowerDesigner16:导入SQL脚本、显示中文注释
|
8月前
|
固态存储 IDE 开发工具
手把手教你安装Keil MDK5:官方网盘资源+芯片支持包配置详解(附调试实战)
Keil是一款专为嵌入式系统开发设计的集成开发环境(IDE),由德国Keil Software公司开发,后被ARM收购整合为MDK-ARM工具链的一部分。本文详细介绍Keil MDK541的安装步骤、系统要求、运行环境配置及首次使用指南,包括许可证管理、芯片支持包安装和工程模板设置等。同时提供新建STM32工程、编写测试代码的具体操作,并解答常见问题,如缺少DLL文件、语言设置及编译错误处理。附延伸学习资源与版权声明,帮助用户高效上手Keil开发环境。
4944 24
【Java基础面试十九】、构造方法能不能重写?
这篇文章指出Java中的构造方法不能被重写,因为构造方法必须与类名相同,而重写要求子类方法与父类方法同名,允许构造方法重写将违背这一规则。
【Java基础面试十九】、构造方法能不能重写?
|
存储 数据采集 监控
将百万数据插入到 Redis,有哪些实现方案
【10月更文挑战第15天】将百万数据插入到 Redis 是一个具有挑战性的任务,但通过合理选择实现方案和进行性能优化,可以高效地完成任务。
620 0
|
消息中间件 运维 容灾
RocketMQ 在小米的多场景灾备实践案例
RocketMQ 在小米的多场景灾备实践案例
1703 92
RocketMQ 在小米的多场景灾备实践案例
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
存储 数据安全/隐私保护 Python
python批量压缩文件并生成解压密码
该教程指导安装Python库`py7zr`以处理7z压缩文件。接着,提供了一个Python脚本,该脚本遍历指定目录,对每个文件创建加密的7z压缩包,并为每个文件生成独特密码,密码存储在文本文件中。要运行脚本,将其保存为`.py`文件并在命令行使用`python`命令执行。注意,路径需根据操作系统调整,且应使用原始字符串避免`\`的转义问题。
434 0
|
Java API 开发者
Spring揭秘:BeanDefinitionBuilder接口应用场景及实现原理!
BeanDefinitionBuilder类为Spring框架中的Bean定义提供了灵活且强大构建方式,通过API,开发者能够轻松创建和配置Bean,无需依赖繁琐的XML配置或注解。
498 2
Spring揭秘:BeanDefinitionBuilder接口应用场景及实现原理!