栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java运维调优的神器Arthas---入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java运维调优的神器Arthas---入门

Arthas Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题 一、安装启动arthas 1.下载arthas-boot.jar

官网:https://arthas.aliyun.com/doc/quick-start.html
Maven下载:

com.taobao.arthas
arthas-spring-boot-starter
3.4.8
runtime

2.启动arthas-boot.jar(就是启动arthas)

java -jar arthas-boot.jar

3.选择你要调试的项目

输入1 回车

二、常用命令 1.dashboard 数据面板

持续刷新的,按Ctrl+C或者Q退出

2.cls清屏 3.thread查看线程信息

4.jad 反编译java的class为java代码

jad com.jinhaoyang.erp.action.ProductAction(路径)

5.watch 监视(有点类似Debug)

watch com.jinhaoyang.erp.action.ProductAction findAllInInstruments returnobj

6. 退出arthas 的命令,quit或者exit退出绘画还在,stop是真正退出arthas。

三、基础命令之一 1.help 查询所有命令 2.cat 显示文件内容 3.grep 匹配查询和linux里的grep命令类似,但它只能用于管道命令


sysprop | grep java -n -m10 只显示十行


sysprop | grep -e “d{2,}” 正则表达式 两个数字也上的

4.pwd 返回当前工作目录和linux命令类似(pwd: Print Work Directory 打印当前目录) 5. cls清屏(windows一样清屏也是cls)-----linux的清屏是clear

四、基础命令之二 1.session :查看当前会话的信息

2.reset 重置增强类,将被Arthas增强过的类全部还原,Arthas服务端关闭时会重置所有增强过的类

3.version:加载当前目标java进程加载的Arthas版本号

4.history :打印命令历史

5.quit 退出当前Arthas客服端,其他Arthas客服端不影响 6.stop 是关闭Arthas服务器,所有Arthas客服端全部退出。 7.keymap: Arthas快捷键列表及自定义快捷键


五、jvm相关的命令之一 1.dashboard :显示当前系统的实时数据面板,

2.thread 线程相关 查看当前jvm的线程堆栈信息

thread -i 1000 -n 3 1000毫秒内最方面的3个线程
thread --state WAITING 查看处于等待状态的线程

3.jvm 查看Java虚拟机的信息 4. sysprop 修改java临时的属性

如:sysprop user.country 改为中文的
sysprop java.version java的路径

六、jvm相关的命令之二 1.sysenv (System Environment Variables)

查看所有的环境变量

2. vmoption 查看虚拟机的相关的参数

vmoption PrintGCDetails true 更新指定的选项

3.getstatic 查看类的静态属性

getstatic 类名 属性

4.ognl 3.0.5版本新增的功能有一定的语法要求

语法强大但是,但是有点复杂

七、Class/classsloader 相关命令之一 1.sc:Search Class(缩写)

查看jvm已加载的类信息,这命令能搜索出所有已经加载到jvm中的class信息,sc默认开启了子类匹配功能。如果想要精确的匹配,打开 options disable-sub-class true 开关。

2.sm:Search Method (简写)

搜索类所声明的方法,父亲则无法看到。

八、Class/classsloader 相关命令之一 1.jad 把字节码文件反编译成源代码了


jad java.lang.String trim 反编译String的trim方法

2.mc 在内存中把源代码编译成字节码文件

mc /root/Hello.java -d /root 把Hello.java文件编译为Hello.class到root目录下

3.redefine 加载外部的.class文件,redefine 到Jvm里







《Arthas进阶》 一、类和类加载器相关的命令 1.dump 将已加载的字节码文件保存到特定目录:/logs/arthas/classdump/


dump java.lang.String

2.classloader获取类加载器的信息

classloader

classloader -l

classloader -c 680f2739

classloader -c 680f2739 -r java/lang/String.class

classloader -c 680f2739 -load java.lang.String

3.monitor :监控指定类中的执行情况 (120秒监视一次)


monitor dem.MathGame primeFactors -c 5 (5秒执行一次)

4.watch 观察到指定方法的调用情况

1.观察类中方法出参和返回值,结果属性遍历深度为2

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

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

4.查看target某一个属性 target.illegalArgumentCount

5.同时观察方法调用前和方法调用后,参数里-n 2,表示只执行两次

watch com.jinhaoyang.erp.action.LoginAction execute “{params,target,returnObj}” -x 2 -b -s -n 2

6.条件表达式的列表,输出第1参数小于的情况

watch com.jinhaoyang.erp.action.LoginAction execute “{params[0],target}” “params[0]>0”

小结

5.trace 对方法内部调用路径进行追踪,并输出方法路径上的每个节点上耗时。


trace函数指定类的指定方法 1.trace com.jinhaoyang.erp.action.LoginAction execute

红色表示执行时间最的方法 2.trace com.jinhaoyang.erp.action.LoginAction execute -n 2 执行两次

3.trace --skipJDKMethod false com.jinhaoyang.erp.action.LoginAction execute -n 2

4.调用执行时间大于某个值的(过滤)

trace com.jinhaoyang.erp.action.LoginAction execute “#cost>100”

小结

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

1.方法上层调用关系

stack com.jinhaoyang.erp.action.LoginAction execute

2.通过条件表达式来过滤,第0个参数的值小于0

stack com.jinhaoyang.erp.action.LoginAction execute “params[0]<0” -n 2

3.执行时间大于0.5秒的

stack com.jinhaoyang.erp.action.LoginAction execute “#cost>0.5”

7.tt time-tunnel时间隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同时间下调用的信息进行观测

1.tt -t com.jinhaoyang.erp.action.LoginAction execute 记录方法当前方法每次调用的环境现场




tt -i 1008

tt -i 1008 -p 在调用一次1008
tt -i 1008 -p --replay -times 3 调用三次1008
tt -i 1008 -p --replay -times 3 --replay-interval 2000 2秒调用一次

8.options


9.Profiler 火焰图 生成火焰图



生成的火焰图




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631058.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号