
Arthas
文章平均质量分 94
Arthas 全攻略:让调试变得简单
刘大猫.
如果有天突然发现路的尽头还是路的话,希望你还没错过太多沿路的风景和眼前珍惜的人。
展开
-
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。,默认情况下,生成的是 cpu 的火焰图,即 event 为。参数指定的文件名后缀为。原创 2024-09-29 11:45:34 · 1025 阅读 · 0 评论 -
Arthas watch (方法执行数据观测)
watch 全路径类名 方法名 {params,returnObj,throwExp} -x 8 -b -s。watch 全路径类名 方法名 {params,returnObj,throwExp} -x 8。代码:请求前传入ouValues参数,方法返回的也是这个参数。让你能方便的观察到指定函数的调用情况。,通过编写 OGNL 表达式进行对应变量的查看。原创 2024-09-29 11:43:40 · 562 阅读 · 0 评论 -
Arthas tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测)
当你稍稍做了一些调整之后,你可能需要前端系统重新触发一次你的调用,此时得求爷爷告奶奶的需要前端配合联调的同学再次发起一次调用。虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。你会发现结果虽然一样,但调用的路径发生了变化,由原来的程序发起变成了 Arthas 自己的内部线程发起的调用了。方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测。指定 调用次数,通过。原创 2024-09-29 11:42:31 · 1052 阅读 · 0 评论 -
Arthas trace (方法内部调用路径,并输出方法路径上的每个节点上耗时)
很多时候我们只想看到某个方法的 rt 大于某个时间之后的 trace 结果,现在 Arthas 可以按照方法执行的耗时来进行过滤了,例如。命令在 Arthas 中用于跟踪方法的执行过程,能够详细记录方法调用的时间、参数、返回值等信息。对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。表示当执行时间超过 100ms 的时候,才会输出 trace 的结果。参数指定捕捉结果的次数。,只要是一个合法的 ognl 表达式,都能被正常支持。方法内部调用路径,并输出方法路径上的每个节点上耗时。原创 2024-09-29 11:41:05 · 953 阅读 · 0 评论 -
Arthas stack (输出当前方法被调用的调用路径)
很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写。命令,开发者可以获取详细的线程执行信息,帮助快速定位和解决问题。,只要是一个合法的 ognl 表达式,都能被正常支持。参数最主要是封装了通知节点的所有信息。观察的维度也比较多,主要体现在参数。输出当前方法被调用的调用路径。stack 全路径类名 方法名。中关于该节点的描述。原创 2024-09-29 11:39:29 · 470 阅读 · 0 评论 -
Arthas monitor(方法执行监控)
请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 stop 或将增强过的类执行 reset 命令。服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 命令不会引起原有业务逻辑的改变。命令,可以帮助开发者更好地理解应用的运行状态,从而进行针对性的优化。的类、方法的调用进行监控。原创 2024-09-29 09:16:11 · 785 阅读 · 0 评论 -
Arthas sm(查看已加载类的方法信息 )
Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。问题:这sm方法有啥用?我只能看出方法入参类型 返回类型等等,你又看不到具体的代码逻辑 感觉没用啊。命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到。sm -d 全路径类名 方法名。原创 2024-09-29 09:14:24 · 562 阅读 · 0 评论 -
Arthas sc(查看JVM已加载的类信息 )
class-pattern 支持全限定名,如 com.taobao.test.AAA,也支持 com/taobao/test/AAA 这样的格式,这样,我们从异常堆栈里面把类名拷贝过来的时候,不需要在手动把。“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息;sc 默认开启了子类匹配功能,也就是说所有当前类的子类也会被搜索出来,想要精确的匹配,请打开。问题:getstatic命令和sc命令区别是啥?命令用于获取特定类的静态字段的值,而。原创 2024-09-28 10:04:42 · 1362 阅读 · 0 评论 -
Arthas classloader (查看 classloader 的继承树,urls,类加载信息)
查看 classloader 的继承树,urls,类加载信息。可以让指定的 classloader 去 getResources,打印出所有查找到的 resources 的 url。原创 2024-09-28 10:02:00 · 512 阅读 · 0 评论 -
Arthas memory(查看 JVM 内存信息)
Arthas memory(查看 JVM 内存信息)原创 2024-09-27 09:02:07 · 556 阅读 · 0 评论 -
Arthas redefine(加载外部的.class文件,redefine到JVM里 )
原因是 jdk 本身 redefine 和 Retransform 是不同的机制,同时使用两种机制来更新字节码,只有最后修改的会生效。:redefine 后的原来的类不能恢复,redefine 有可能失败(比如增加了新的 field),参考 jdk 本身的文档。:redefine 的 class 不能修改、添加、删除类的 field 和 method,包括方法参数、方法名称及返回值。:如果 mc 失败,可以在本地开发环境编译好 class 文件,上传到目标系统,使用 redefine 热加载 class。原创 2024-09-27 08:55:54 · 672 阅读 · 0 评论 -
Arthas mc(Memory Compiler/内存编译器 )
执行命令后效果,按照包名com.hero.lte.ems.security.controller创建.class文件。mc --classLoaderClass 全包名类名 置顶路径下的类 -d 指定输出路径。:mc 命令有可能失败。如果编译失败可以在本地编译好。Memory Compiler/内存编译器,编译。mc -d 输出路径 置顶路径下的类。文件,再上传到服务器。命令实现热更新代码。原创 2024-09-27 08:54:39 · 411 阅读 · 0 评论 -
Arthas jad(字节码文件反编译成源代码 )
的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而。命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑。jad --source-only 全路径类名 方法名 --lineNumber false。参数默认值为 true,显示指定为 false 则不打印行号。jad --source-only 全路径类名 方法名。默认情况下,反编译结果里会带有。选项,可以只打印源代码。原创 2024-09-26 16:14:26 · 728 阅读 · 0 评论 -
Arthas vmtool(从 jvm 里查询对象,执行 forceGc)
vmtool --action getInstances --className 全路径类名 --limit 10。问题:arthas命令中,vmtool和sc有啥区别,感觉都是从jvm查看已加载的类信息?参数,可以限制返回值数量,避免获取超大数据时对 JVM 造成压力。接口,实现查询内存对象,强制 GC 等功能。原创 2024-09-26 16:11:31 · 597 阅读 · 0 评论 -
Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)
Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)原创 2024-09-24 08:56:06 · 564 阅读 · 0 评论 -
Arthas ognl(执行ognl表达式)
Arthas 的 OGNL(Object-Graph Navigation Library)表达式功能是一个强大的特性,主要用于动态地访问和操作 Java 对象。这一功能在调试和分析 Java 应用程序时尤其有用。OGNL 表达式使得你可以在运行时检索、修改对象的属性,甚至调用对象的方法,所有这些都无需修改源代码或重新启动应用程序。ognl ‘@全路径类目@静态方法名(“参数”)’ognl ‘@全路径类目@静态属性名’原创 2024-09-24 08:54:24 · 567 阅读 · 0 评论 -
Arthas mbean(查看 Mbean 的信息)
提供的一个重要命令,它可以用来查看和操作 Java MBeans(管理 Beans)。MBeans 是 Java Management Extensions (JMX) 的一部分,允许你监控和管理 Java 应用程序的运行时行为。原创 2024-09-23 09:25:12 · 883 阅读 · 0 评论 -
Arthas logger(查看 logger 信息,更新 logger level)
logger -c [classLoaderHash的值] --name [查找类的全路径] --level [待更新的日志level]logger --name [查找类的全路径]代码 LogOutputController。查看当前级别 log4j2.xml。arthas更改在线日志级别。再次调用接口打印,结果如图。原创 2024-09-23 09:23:27 · 477 阅读 · 0 评论 -
Arthas getstatic(查看类的静态属性 )
我们项目部署在linux上,我有个本地内存HashMap,我想看下本地内存里面的值,我不想重新补充toString()再打包部署,通过getstatic就可以直接获取到。getstatic 类名 属性名。原创 2024-09-22 17:14:08 · 619 阅读 · 0 评论 -
Arthas 全攻略:让调试变得简单
注意 :我安装的版本是:Arthas V3.7.2Alibaba开源的Java诊断工具。从 arthas-boot 开始,它的核心作用就是启动引导用户选择需要增强的Java进程PID,最终将PID传入 arthas-core 中;arthas-core根据用户选择的PID,利用Java Agent机制使用 arthas-agent 对目标进程进行增强;arthas-agent被唤醒后,就会启动命令行服务器监听命令,并匹配对应的命令处理器(XxxCommand)对用户命令进行处理,并返回。原创 2024-09-19 16:45:53 · 472 阅读 · 0 评论 -
Arthas vmoption(查看和修改 JVM里诊断相关的option)
Arthas vmoption(查看和修改 JVM里诊断相关的option)原创 2024-09-21 10:58:36 · 490 阅读 · 0 评论 -
Arthas jvm(查看当前JVM的信息)
Arthas jvm查看当前JVM的信息原创 2024-09-20 09:36:46 · 598 阅读 · 0 评论 -
Arthas thread(查看当前JVM的线程堆栈信息)
你看到的输出确实是 Arthas 的 thread 命令的查询结果,实际上它展示了线程的运行堆栈信息,这些信息可以帮助你分析线程的状态和性能瓶颈。命令用于查看和分析 JVM 中的线程信息。这个命令提供了关于线程的详细视图,有助于诊断线程相关的问题。这些信息对于诊断和分析线程的行为很有帮助。如果你在分析过程中遇到其他问题,可以提供更多细节,以便更好地协助你。thread 线程ID。原创 2024-09-19 17:02:22 · 1153 阅读 · 0 评论 -
Arthas dashboard(当前系统的实时数据面板)
线程的 cpu 使用率。比如采样间隔 1000ms,某个线程的增量 cpu 时间为 100ms,则 cpu 使用率=100/1000=10%它展示了一个综合的仪表盘,帮助你快速查看 JVM 的各种关键性能指标。: Java 级别的线程 ID,注意这个 ID 不能跟 jstack 中的 nativeID 一一对应。: 线程优先级, 1~10 之间的数字,越大表示优先级越高。: 上次采样之后线程运行增量 CPU 时间,数据格式为秒。: 线程运行总 CPU 时间,数据格式为分:秒。: 线程当前的中断位状态。原创 2024-09-19 16:53:42 · 744 阅读 · 0 评论 -
Arthas sysprop(查看和修改JVM的系统属性)
Arthas sysprop(查看和修改JVM的系统属性)原创 2024-09-20 09:39:04 · 522 阅读 · 0 评论 -
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
heapdump --live --include-class=指定类的全路径 --format=指定输出文件的格式。heapdump --live 指定输出的路径及文件名。原创 2024-09-22 17:16:09 · 637 阅读 · 0 评论