| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Arthas在线诊断工具使用 -> 正文阅读 |
|
[Java知识库]Arthas在线诊断工具使用 |
Arthas 命令? 下载地址下载地址:Releases · alibaba/arthas · GitHub 参考官方文档:https://arthas.aliyun.com/doc/quick-start.html 使用版本arthas-all-3.6.0版本,windows环境下使用 解压到指定目录 /xx/xx/arthas/ 详情如下图 启动ArthasWindows 控制台 cmd cd /xx/xx/arthas/ 启动命令 java? -jar arthas-boot.jar 启动后如下图 蓝色方框表示java进程下标,输入下游即可进入相关java进程 如下图 红色方框表示 java 进程ID,如上图 默认30分钟后会自动退出session 常用命令及操作dashboard-查看进程面板memory-查看内存使用情况jvm-查看JVM使用情况
sysprop-查看,修改系统参数
sysprop查看所有系统属性 sysprop key 查看单个系统属性 sysprop key value 修改单个系统属性 sysenv-查看当前JVM的环境属性sysenv 查看所有jvm环境变量 sysenv key? 查看单个jvm环境变量 vmoption 查看,更新jvm参数
vmoption 查看所有JVM参数 vmoption key 查看单个jvm参数 vmoption key value 修改jvm属性信息 classLoader 查看classloader的继承树,urls,类加载信息classLoader -l 查看类加载实例统计数据 classLoader -t 查看类加载器树形结构 classLoader -c hashcode? 查看加载器加载jar的urls ????????????????????????????????????????????? jad 反编译指定已加载类的源码jad? .class? 查看反编译源码,包含classLoader,重新编译.class jad --source-only .class 查看只源码不显示classLoader jad --source-only .class method --lineNumber false 查看某方法源码不显示行号 sc 查看jvm类加载信息sc?? -d? class 查看类属性信息 下图红框为类加载器 sc? -d? -f? class 查看类信息,属性信息 sc? -d? class |grep key 查看某个类属性信息 mc 将.java文件编译成 .class 文件mc? xxx.java? -d? path 指定文件编译保存地址 mc? -c hashcode xxx.java? -d path 指定类加载器编译 retransform 加载外部的.class文件,覆盖jvm已加载的类retransform path 指定重新加载外部.class文件 retransform的限制
retransform -l 统计所有重新加载 .class文件 retransform -d id编号 删除重载的.class文件? -d ID编号 retransform --deleteAll 删除全部 retransform --classPattern?? xxx.class 文件 重新回复编译文件 watch java方法执行数据观测注: 观察表达式, 返回时的? {参数,? this对象, 返回值} 观察表达式,默认值是{params, -x 查看层级,-n 查看次数 watch? class? method? 实时查看指定类的方法入参和出参,持续打印结果 实时查看耗时大于10毫秒数据,查看一次展示5层级参数
实时查看耗时大于10毫秒且第一个数据等于1的数据,查看一次展示5层级参数
实时查看第一个数据大于1且第二个数据等于“hello”的数据,查看一次展示5层级参数
实时查看第一个数据小于5或者?第二个数据等于“world”的数据,查看一次展示5层级参数
trace 方法内部调用路径及耗时 trace?? class?? method 查看指定类调用链及耗时 ts=2022-04-22 15:24:01; 系统执行时间 thread_name=main;id=1; 线程名称,线程ID is_daemon=false;priority=5; 是否守护线程,权重 TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2 类加载器 `---[0.1172ms] fills.arthas.ArthasTest:test() 执行时间 stack 输出当前方法被调用的调用路径stack?? class?? method 查看指定类方法所有调用路径 ts=2022-04-22 15:37:02; 系统执行时间 thread_name=main;id=1; 线程名称,线程ID is_daemon=false;priority=5; 是否守护线程,权重 TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2 类加载器 @fills.arthas.ArthasTest.test() ??????? at fills.arthas.ArthasTest.main(ArthasTest.java:9)? 调用链 ognl 调用静态属性和方法1.查看静态属性 ognl? ‘@全路经类名@属性字段’? -x 1 查看字段一级属性值 2.查看静态方法 ognl? ‘@全路经类名@方法名称(xx,xx)’? -x? 1 调用静态方法查看一级返回值; 2,3查看二,三级参数 案例场景应用调用链接口新性能损耗分析trace? class? method 实时抓取调用类方法请求及调用链处理时耗 注trace 每次只能查看一级链路耗时情况 trace? com. listProductMapping 从调用链耗时情况可以看出是在调用dubbo服务耗时最多 ?+---[227.5465ms] com.ddky.top.meituan.service.ProductManageService:listProductManage() #140 trace com.ddky.top.meituan.service.ProductManageService listProductManage ?+---[19.0228ms] com.ddky.top.meituan.data.dao.ProductManageDao:countProductMapping() #128 ?+---[9.3109ms] com.ddky.top.meituan.data.dao.ProductManageDao:listProductMapping() #132 +---[79.1293ms] com.ddky.top.inner.api.service.InnerProductClient:getPageFromCondition() #167 调用外部dubbo耗时 +---[63.7842ms] com.ddky.top.meituan.service.ProductPriceService:newReadBatchGetTopPrice() #171 循环内部接口调用耗时 从上图看出主要耗时地方有2处 建议优化方案 调用外部dubbo接口异步处理 调用内部循环调用改为批量查询 在线修改源码并热发布迅速解决线上问题原有逻辑操作
注(1-4步)可以线下生成class文件上传线上服务器,复杂的类编译很容易出错,不建议 ???? 5.retransform? class? 重新加载类文件 ?? ? 6.jad? class 或者 retransform --classPattern class 重新加载源class文件复原线上环境 在线查看修改静态方法及属性值1.查看线上静态配置属性 ognl? ‘@全路经类名@属性字段’? -x 1 查看字段一级属性值 2.调用线上静态方法 ognl? ‘@全路经类名@方法名称(xx,xx)’? -x? 1 调用静态方法查看一级返回值 3.修改静态属性变量 ognl? ‘@全路经类名@方法名称(xxx)’?? 注: 该方法内部未修改属性 修改日志等级1.logger --name ROOT --level debug? 修改日志等级为debug 2. logger -c 2a139a55 --name ROOT --level debug? 指定classloader更新日志等级为debug 略 还有其他运维场景比如修改jvm,系统环境参数,查看线上线程内存使用情况 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:37:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |