arthas使用教程

1.官网教程
idea-arthas 常用方法
请添加图片描述
查看内存里面的变量当前的数据需要再次选择下面红框的选项
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
2.arthas-idea/ognl配置
需要idea安装插件arthas-idea

3.使用ognl调用方法复杂参数(这里需要配置)
arthas-idea帮助
在这里插入图片描述
1 thread
thread -n 3/ 支持一键展示当前最忙的前3个线程并打印堆栈
thread/ 默认按照CPU增量时间降序排列,只显示第一页数据
thread –all/ 显示所有匹配的线程
thread -b/ 找出当前阻塞其他线程的线程
thread -i 1000/ 统计最近1000ms内的线程CPU时间。
thread -n 3 -i 1000/ 列出1000ms内最忙的3个线程栈
thread –state WAITING/ 查看指定状态的线程(WAITING/等待)

2 memory 查看JVM 内存信息
memory/ 查看JVM 内存信息

3 sysprop 查看当前JVM的系统属性
sysprop/ 查看所有属性
sysprop java.version/ 查看单个属性(支持通过TAB键自动补全)
sysprop user.country CN/ 修改单个属性(将user.country修改成CN)

4 sysenv 查看当前JVM的环境属性
sysenv/ 查看所有环境变量
sysenv USER/ 查看单个环境变量

5-6 (vmtool,ognl)复杂参数处理。

@cn.hutool.json.JSONUtil@toBean("{\"username\":\"y1y1\",\"password\":\"y1\"}",@com.yjx.cloud.user.domain.LoginDto@class)

5 vmtool vmtool 利用JVMTI接口,实现调用接口,查询内存对象,强制GC等功能
在这里插入图片描述
上图的方式可以获取spring的任何对象

//vmtool -x 3 --action getInstances --className com.yjx.cloud.user.controller.api.ApiAppUserLoginController  --express 'instances[0].appLogin(@cn.hutool.json.JSONUtil@toBean("{\"username\":\"y1y1\",\"password\":\"y1\"}",@com.yjx.cloud.user.domain.LoginDto@class))'  -c 9e89d68

6 ognl 执行ognl表达式
在这里插入图片描述

ognl -x 3 '#springContext=@com.yjx.cloud.common.spring.ApplicationContextProvider@context,#springContext.getBean("apiAppUserLoginController").appLogin(@cn.hutool.json.JSONUtil@toBean("{\"username\":\"y1y1\",\"password\":\"y1\"}",@com.yjx.cloud.user.domain.LoginDto@class))' -c 9e89d68

7 watch 让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写OGNL表达式进行对应变量的查看. watch 查看添加一些默认参数,比如-x 3 展开3层数据

在这里插入图片描述

8 trace 方法内部调用路径,并输出方法路径上的每个节点上耗时在这里插入图片描述
9 stack 输出当前方法被调用的调用路径
在这里插入图片描述

10 monitor 方法执行监控
在这里插入图片描述

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

11 jad 反编译class成java文件
在这里插入图片描述
12 arthas热部署处理
在这里插入图片描述
将上面复制的数据保存到xxx.sh, 然后去服务器里面执行,会自动进入arthas的选择服务进程,选择对应的进行class热部署

其他有用命令

动态替换字节码

把class文件复制到tmp路径
进arthas后执行下面的代码

retransform /tmp/Test.class

•jad:反编译某个函数,一般用在线上代码有问题时,看看是否是代码发布时,选错了版本; jad 类全名通配符 函数名(可选) --lineNumber(显示行号)
•sc:查看已加载的类信息,这个命令当被第三方修改了字节码的时候,特别有用 sc 类全名通配符 函数名通配符 -d(详情) -f(输出类成员变量信息) -E(开启正则匹配)
•dashboard:当前系统的实时数据面板,按 ctrl+c 退出
•monitor:方法执行监控,比如每隔5秒统计某个方法执行次数,也可以执行入参过滤条件 monitor -c 5 -E(开启正则匹配)类全名通配符 函数名通配符 “params[0] <= 2”
•thread:查看当前线程信息,查看线程的堆栈,如thread -n 3
•jvm:查看当前JVM信息
•sysprop:查看当前JVM的系统属性(System Property)
•sysenv:查看当前JVM的环境属性(System Environment Variables)
•vmoption:查看,更新VM诊断相关的参数,如vmoption PrintGCDetails
•perfcounter:查看当前JVM的 Perf Counter信息
•logger:查看logger信息,更新logger level
•mbean:查看 Mbean 的信息,这个命令可以便捷的查看或监控 Mbean 的属性信息。
•getstatic:推荐直接使用ognl命令,更加灵活。通过getstatic命令可以方便的查看类的静态属性。
•ognl:执行ognl表达式,如调用静态函数:ognl ‘@java.lang.System@out.println(“hello”)’
,获取静态字段:ognl ‘@demo.MathGame@random’
•sm:查看已加载类的方法信息,这个命令能搜索出所有已经加载了 Class 信息的方法信息。
•dump:dump 已加载类的 bytecode 到特定目录,如dump -d /tmp/output java.lang.String
•heapdump:dump java heap, 类似jmap命令的heap dump功能。
•classloader:查看classloader的继承树,urls,类加载信息,classloader 命令将 JVM 中所有的classloader的信息统计出来,并可以展示继承树,urls等。
•mc:Memory Compiler/内存编译器,编译.java文件生成.class。
•retransform:加载外部的.class文件,retransform jvm已加载的类。retransform /tmp/Test.class
,通过-d参数删除外部类,通过–deleteAll删除所有外部类
•redefine:推荐使用 retransform 命令,redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置。原因是jdk本身redefine和Retransform是不同的机制,同时使用两种机制来更新字节码,只有最后修改的会生效。
•trace:方法内部调用路径,并输出方法路径上的每个节点上耗时,trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
•stack:输出当前方法被调用的调用路径,很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。
•profiler:使用async-profiler生成火焰图,profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。
•cat:打印文件内容,和linux里的cat命令类似。
•base64:base64编码转换,和linux里的 base64 命令类似。
•tee:类似传统的tee命令, 用于读取标准输入的数据,并将其内容输出成文件。tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。如:sysprop | tee -a /path/to/logfile | grep java
•auth:验证当前会话,在attach时,可以在命令行指定密码。

13 应用启动耗时分析

在这里插入图片描述
在这里插入图片描述

启动arthas后选择相应的服务

先打断点启动
在这里插入图片描述

profiler start --event cpu --interval 10000000

在这里插入图片描述
放开idea的断点执行完spring启动后再执行

profiler stop --format html

在这里插入图片描述
会生成一个html文件,用浏览器打开看 进行分析
结果如下图,此图俗称火焰图,主要看每个方法的横轴长度,占用横坐标越长的操作,其占用的 cpu 即最长,很直观的
在这里插入图片描述

14 idea 查看当前Dump 可以看到当前占用cup长的方法
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值