首页 > 基础资料 博客日记
Arthas使用指南:安装与常用命令(trace、watch)详解
2025-07-30 21:00:02基础资料围观232次
这篇文章介绍了Arthas使用指南:安装与常用命令(trace、watch)详解,分享给大家做个参考,收藏Java资料网收获更多编程知识
Arthas 是阿里开源的Java诊断工具,能在不重启应用的情况下实现线上问题排查、性能监控和动态代码热更新。本文将详细介绍其核心功能与使用技巧。
一、快速安装与启动
# 下载最新版Arthas
curl -O https://arthas.aliyun.com/arthas-boot.jar
# 启动并选择目标JVM进程
java -jar arthas-boot.jar
启动后会显示当前机器上的Java进程列表,输入序号即可附加到目标进程进行诊断。
二、性能瓶颈定位:trace命令
命令格式:
trace [全限定类名] [方法名] '#cost>阈值' -n 监控次数
核心功能:
追踪方法内部调用链,精确到每一行代码的耗时,快速定位性能瓶颈。
使用示例:
# 监控saveMedicalDiag方法,仅显示耗时>10ms的调用,最多捕获5次
trace com.example.ClinicService saveMedicalDiag '#cost>10' -n 5
输出解读:
`---ts=2025-07-30 12:00:00;thread_name=http-nio-8080-exec-1;id=1e;is_daemon=true;priority=5;
`---[15.78ms] com.example.ClinicService:saveMedicalDiag()
+---[0.5ms] com.example.DBUtil:getConnection()
+---[12.0ms] com.example.DAO:insert() # ⚠️ 主要耗时点
`---[3.2ms] com.example.Logger:writeLog()
注意事项:
- 默认忽略
java.*
包下的调用,需逐层排查或使用正则监控多层调用 - 正则监控示例:
trace -E com.service.*|com.dao.* save*
三、运行时数据观测:watch命令
命令格式:
watch [类名] [方法名] '{观察表达式}' [参数]
核心功能
观察表达式 | 作用 | 示例 |
---|---|---|
params |
捕获方法入参 | {params[0].userName} |
target |
获取当前对象属性 | target.connectionPoolSize |
returnObj |
获取返回值 | returnObj.status |
throwExp |
捕获异常信息 | throwExp.getMessage() |
常用参数
参数 | 作用 |
---|---|
-b |
方法调用前触发 |
-e |
异常时触发 |
-s |
方法返回后触发 |
-f |
方法结束后触发 |
-x 3 |
设置对象遍历深度 |
-n 10 |
仅监控前10次调用 |
--exclude-class-pattern *Controller |
排除特定类 |
实用场景示例
1. 监控异常时的入参:
watch com.example.OrderService createOrder '{params, throwExp}' -e -x 3
输出:
ts=2025-07-30 14:30:00; [cost=45ms] result=ArrayList[
@Object[][ # 入参
@OrderRequest[userId="U123", productId=null], # ⚠️ 空值导致异常
],
ctd.persistence.DAOException: 产品ID不能为空! # 异常信息
]
2. 监控返回值属性:
watch com.example.UserService getUser '{returnObj.age, returnObj.name}' -s
3. 跟踪对象状态变化:
watch com.example.CacheService refresh 'target.cacheSize' -f
四、Arthas核心优势
-
无侵入诊断
无需修改代码或重启服务,直接接入线上JVM进程 -
精准定位
trace
精确到代码行级耗时,watch
实时捕获运行时数据 -
动态热更新
支持在线修改字节码(https://arthas.aliyun.com/doc/redefine.html) -
全链路支持
集成火焰图、线程分析、内存监控等全方位工具
五、使用建议
-
生产环境慎用
优先在测试环境验证命令,避免-f
参数导致大量日志输出 -
组合使用命令
先用trace
定位瓶颈方法,再用watch
分析具体参数 -
正则表达式优化
使用-E
参数批量监控多个类:watch -E 'com.service.*|com.dao.*' *
通过Arthas官方提供的https://arthas.aliyun.com/doc/web-console.html可图形化操作,提升诊断效率。
掌握Arthas的核心命令,能让Java应用的线上问题排查效率提升数倍,真正实现“无需重启的诊断艺术”。
文章来源:https://www.cnblogs.com/ydswin/p/19013845
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?