Stack 命令的语法和案例 | 学习笔记

简介: 快速学习 Stack 命令的语法和案例

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

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


stack 命令的语法和案例


内容介绍

一.stack 的介绍

二.stack 运行的案例


一.stack 的介绍

Stack 是一条比较常用的命令。Watch,trace 和stack 是在后期用的比较多。

作用:输出当前方法和想要知道的某个方法被调用的整个调用路径。

介绍:很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多或者你根本就不知道这个方法是从哪里被执行了,此时你需要的是 stack命令。

在 java 编程时经常会发现有时候程序出现异常,此时它会把整个方法和调用张都给打印出来,所以 java 对此非常熟悉。而 stack 用来追踪程序执行过程中的调用路径,不一定是出错的时候才看到。所以想知道一个方法是怎样去调用,可以通过 stack 命令去了解。

参数说明

Watch,trace,stack 的参数说明大同小异。

参数名称

Class-pattern    类名表达式匹配

Method-pattern    方法名表达式匹配

Condition-pattern   条件表达式,OGNL

[E]         开启正则表达式匹配,默认为通配符匹配

[n:]        执行次数限制//在前面两个命令当中也用到了,只让它执行多少次就退出,不然会不断追踪,就会输出。

image.png

下面通过三个例子来演示 stack 命令的使用。


二.stack 运行的案例

(1)案例一

想要获取 frimeFactors 它的调用的路径, frimeFactors 的调用路径是怎样的?它由 run 来调用,run 由 main 调用。

image.png

[arthas@6523]$ stack demo.MathGame pri

primeFactors print

[arthas@6523]$ stack demo.MathGame primeFactors

只叫回车即可,不用写任何条件表达式,因为有三个参数,只写了类名和方法的表达式,并没有写条件表达式,因为我们未进行过滤。现在按回车,即可看到执行结果。追踪了三次,调用方式一样。

image.png

然后退出,如果不退出,否则将一直向下执行。

这里的参数和之前学的参数一样,有现成的时间,名字,ID,优先事项以及类加载器。

接下来看看是否有其它可能

凡是只要frimeFactors这个地方,它都是这三个方法调用的。

如何获取frimeFactors方法的调用路径?

(2)案例二

采用条件表达式来过滤第0个参数值小于0,-n表示获取二次。也就是说,它的参数小于0的,才显示它的路径,大于0就不显示。而且只获取2次。

代码怎么写?代条件表达式。

[arthas@6523]$ stack demo.MathGame primeFactors ‘params[0]小于0’ -n 2即可。再回去。要等一下,因为很多时候它不是小于0,它是大于0。

Params//所有参数 [0]//第0个参数。

image.png

这两次即可发现,它们相同。

调用main然后调用run,但是run和primeFactors有一点区别。小于0,就不调用demo.MathGame.primeFactors,调用路径有区别。

如果primeFactors调用了小于0,则方法并没有正常结束。如无正常结束,它并无完整地把结果打印出来。就说明这个方法中间出现了异常,只要小于0,以后看到它的值,这两行:

@demo.MathGame.run()

At demo.MathGame.main(MathGame.java:16)

确定它的方法在demo的情况下只看哪些参数,这有利于后期进行诊断。

(3)案例三

根据执行的时间来进行过滤,把耗时大于0.5毫秒的,把它显示出来。

这时,参数怎么写呢?

[arthas@6523]$ stack demo.MathGame primeFactors’#cost大于0.5’

执行路径都是只有两个,异常,导致执行时间的增加。查看是否两种情况都有,此时需要等,有时执行速度很快,有时很慢,在执行中暂时未发现,需要把时间调小一点。

假设把0.5改成0.25秒,还是暂未发现。1秒,2秒是输出它的耗时,具体的耗时,无法查看,用trace即可。

小结

Stack命令的作用是什么?

输出当前方法被调用的路径

相关文章
|
安全 架构师 应用服务中间件
Nginx极简入门(五)配置Nginx反向代理
反向代理(Reverse Proxy)则是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
Nginx极简入门(五)配置Nginx反向代理
|
Java Python Windows
Python pip 源设置成国内源,阿里云源,清华大学源,最方便的方式,都在这里了
Python pip 源设置成国内源,阿里云源,清华大学源,最方便的方式,都在这里了
82346 1
|
网络协议 数据安全/隐私保护 网络架构
如何在家中使用手机或电脑远程控制公司iStoreOS软路由下的电脑桌面
如何在家中使用手机或电脑远程控制公司iStoreOS软路由下的电脑桌面
643 4
|
数据安全/隐私保护 安全
单点登录(SSO)看这一篇就够了
背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便。但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多次登录,而且每个系统的账号都不一样,这对于运营人员来说,很不方便。
278484 15
|
机器学习/深度学习 人工智能 算法
主流AI服务——大专生新就业之路
主流AI服务——大专生新就业之路
659 0
|
缓存 自然语言处理 Java
Elasticsearch 断路器报错了,怎么办?
Elasticsearch 断路器报错了,怎么办?
|
存储 easyexcel Java
SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多
SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多
648 0
|
NoSQL Java 测试技术
Springboot2.x集成lettuce连接redis集群报超时异常Command timed out after 6 second(s)
最近在对一新开发Springboot系统做压测,发现刚开始压测时,可以正常对redis集群进行数据存取,但是暂停几分钟后,接着继续用jmeter进行压测时,发现redis就开始突然疯狂爆出异常提示:Command timed out after 6 second(s)......
853 0
Vite:rollup-plugin-visualizer查看打包体积分析report报告
Vite:rollup-plugin-visualizer查看打包体积分析report报告
1850 0
Vite:rollup-plugin-visualizer查看打包体积分析report报告