Java 应用诊断利器 - 阿里巴巴开源的 Java 诊断工具
Arthas 是阿里巴巴开源的 Java 诊断工具,当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样的条件很难复现?
启动后,Arthas 会列出当前系统中的 Java 进程,选择需要诊断的进程即可。
| 命令 | 功能 | 示例 |
|---|---|---|
help |
查看命令帮助信息 | help watch |
cls |
清空当前屏幕区域 | cls |
session |
查看当前会话的信息 | session |
reset |
重置增强类 | reset |
version |
输出当前目标Java进程所加载的Arthas版本号 | version |
history |
打印命令历史 | history |
quit |
退出当前Arthas客户端 | quit |
stop |
关闭Arthas服务端 | stop |
当前系统的实时数据面板,按 q 或者 Ctrl+C 退出。
-i:刷新时间间隔,单位为毫秒-n:刷新次数能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写OGNL表达式进行对应变量的查看。
-b:在方法调用之前观察-e:在方法异常之后观察-s:在方法返回之后观察,默认选项-f:在方法结束之后(正常返回和异常返回)观察-x:指定输出结果的属性遍历深度,默认为1trace命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测。
-t:记录某个方法在一个时间段中的调用-l:显示所有已经记录的列表-n:只记录多少次-s:搜索表达式-i:查看指定记录的详细信息-p:重新调用指定的记录对匹配 class-pattern/method-pattern的类、方法的调用进行监控。
timestamp:时间戳class:Java类method:方法(构造方法、普通方法)total:调用次数success:成功次数fail:失败次数rt:平均RTfail-rate:失败率Arthas集成了async-profiler,可以用来生成火焰图来分析CPU性能热点。
利用JVMTI接口,实现查询内存对象,强制GC等功能。
查看或设置Arthas全局开关
| 名称 | 默认值 | 描述 |
|---|---|---|
| unsafe | false | 是否支持对系统级别的类进行增强 |
| dump | false | 是否支持被增强了的类dump到外部文件中 |
| batch-re-transform | true | 是否支持批量对匹配到的类执行retransform操作 |
| json-format | false | 是否以JSON格式输出 |
| expand-level | 1 | 对象属性展开层次 |
| verbose | false | 是否打印更多详细信息 |
推荐使用 retransform 命令。
Arthas支持Web Console,用户在attach成功之后,可以直接访问:http://127.0.0.1:3658/
提供友好的Web界面,可以通过浏览器直接操作
支持手机等移动设备访问
支持实时刷新,查看最新的监控数据
支持导出执行结果和分析报告
使用精确的类名和方法名,避免使用过于宽泛的通配符
使用-n参数限制执行次数,避免长时间运行影响性能
合理使用条件表达式,只关注需要的数据
使用完毕后执行reset命令,清理增强的类