学习arthas(六)增强命令

Arthas
placeholder image
admin 发布于:2023-09-27 17:48:26
阅读:loading

1.monitor

  • 方法执行监控

(1)对匹配 class-pattern/method-pattern/condition-express的类、方法的调用进行监控。

(2)monitor 命令是一个非实时返回命令.

(3)实时返回命令是输入之后立即返回,而非实时返回的命令,则是不断的等待目标 Java 进程返回信息,直到用户输入 Ctrl+C 为止。

(4)服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 命令不会引起原有业务逻辑的改变。

  • 监控的维度说明

时间戳(timestamp)、Java 类class)、方法(构造方法、普通方法 method()、调用次数total)、成功次数(success)、失败次数fail)、平均 RTrt)、失败率fail-rate

  • 参数说明

(1)类名表达式匹配;

(2)方法名表达式匹配;

(3)条件表达式:

A:开启正则表达式匹配,默认为通配符匹配;

B:统计周期,默认值为 120 秒;

C:在方法调用之前计算 condition-express;

D:指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch];

  • 使用参考

(1)指定 Class 最大匹配数量;

(2)计算条件表达式过滤统计结果(方法执行完毕之后);

(3)计算条件表达式过滤统计结果(方法执行完毕之前);

monitor.png

2.watch

函数执行数据观测,让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。

watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象。

使用参考

(1)观察函数调用返回时的参数、this 对象和返回值;

(2)指定 Class 最大匹配数量;

(3)观察函数调用入口的参数和返回值;

(4)同时观察函数调用前和函数返回后;

(5)调整-x的值,观察具体的函数参数值;

(6)条件表达式的例子;

(7)观察异常信息的例子;

(8)按照耗时进行过滤;

(9)观察当前对象中的属性;

(10)获取类的静态字段、调用类的静态函数的例子;

(11)排除掉指定的类;

(12)不匹配子类;

(13)使用 -v 参数打印更多信息;

watch.png

3.trace

方法内部调用路径,并输出方法路径上的每个节点上耗时。trace 命令能主动搜索 class-pattern /method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

trace.png

4.stack

输出当前方法被调用的调用路径。很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。

stack.png

5.tt

方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测。

watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。

这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。

于是乎,TimeTunnel 命令就诞生了。

tt.png

6.profiler

使用async-profiler生成火焰图。

profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。

profiler 命令基本运行结构是 profiler action [actionArg]

profiler.png

7.jfr

Java Flight Recorder (JFR) 是一种用于收集有关正在运行的 Java 应用程序的诊断和分析数据的工具。它集成到 Java 虚拟机 (JVM) 中,几乎不会造成性能开销,因此即使在负载较重的生产环境中也可以使用。

jfr 命令支持在程序动态运行过程中开启和关闭 JFR 记录。 记录收集有关 event 的数据。事件在特定时间点发生在 JVM 或 Java 应用程序中。每个事件都有一个名称、一个时间戳和一个可选的有效负载。负载是与事件相关的数据,例如 CPU 使用率、事件前后的 Java 堆大小、锁持有者的线程 ID 等。

jfr 命令基本运行结构是 jfr cmd [actionArg]

注意: JDK8 的 8u262 版本之后才支持 jfr

默认在arthas里未找到该命令。


 点赞


 发表评论

当前回复:作者

 评论列表


留言区