1、Java 开源诊断工具 arthas 分享2022 Lenovo Internal.All rights reserved.CONTENTS 目录arthas 案例arthas 简介arthas 安装4321LOGOarthas 命令1.1 arthas 是什么Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具,基本使用场景是定位复现一些生产环境比较难以定位问题。可以在线排查问题,以及动态追踪 Java 代码,实时监控 JVM 状态等等。LOGO1.2 arthas 能干什么当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:1.这个类从哪个 jar 包加载的?为什么会报
2、各种类相关的 Exception?2.我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?3.遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?4.线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!5.是否有一个全局视角来查看系统的运行状况?6.有什么办法可以监控到 JVM 的实时运行状态?7.怎么快速定位应用的热点,生成火焰图?8.怎样直接从 JVM 内查找某个类的实例?LOGO2.1 arthas 安装使用 arthas-boot(推荐)下载 arthas-boot.jar,然后用 java-jar 的方式启动:curl-O http:
3、/localhost/cache/5140214204010134/png/arthas-boot.jar使用 as.sharthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 回车 执行即可:curl-L http:/localhost/cache/5140214204010134/png/install.sh|sh离线安装下载 zip 包后解压获得执行文件,下载链接http:/localhost/cache/5140214204010134/png/downloadlatest_versionLOGO2.2 arthas 快速入门启动,需
4、要使用和目标进程一致的用户启动java-jar arthas-boot.jarattach 到目标进程,输入目标进程对应的数字,回车*1:355422:71560 math-game.jar执行诊断命令退出如果只是退出当前的连接,可以用 quit 或者 exit 命令。Attach到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。如果想完全退出 arthas,可以执行 stop 命令。LOGO2.3 arthas 常用命令LOGO基础命令help显示帮助信息cls清空屏幕显示session查看会话信息version输出当前目标进程加载的 arthas 进程号
5、reset重置被 arthas 增强过的类history打印命令历史quit退出当前 arthas 客户端stop关闭 arthas 服务端2.3 arthas 常用命令LOGOclass 相关jad反编译指定已加载类的源码redefine加载外部的.class 文件,热更新使用sc查看 jvm 已加载类的信息classloader查看类加载器的继承树、urls,类加载信息2.3 arthas 常用命令LOGOjvm 相关dashboard目标进程的实时数据面板jvm查看 jvm 信息logger查看 logger 信息,更新 logger levelognl执行 ognl 表达式thread
6、查看线程,查看堆栈sysprop查看 jvm 的系统属性getstatic访问静态变量,可以用 ognl 替代2.3 arthas 常用命令LOGO字节码增强相关tt方法执行数据的时空隧道watch查看执行方法的调用情况,包括返回值、抛出异常、入参,也可以通过使用 ognl 来查看对应变量monitor对方法执行监控stack输出方法被调用的调用路径trace方法内部调用路径,并输出方法路径上每个节点的耗时2.4 idea插件idea中打开“settings”-“plugin”,在market的搜索框中输入arthas进行搜索,选择结果中的“arthas idea”进行安装即可将光标放置在具体
7、的类、字段、方法上面 右键选择需要执行的命令,部分会有窗口弹出、根据界面操作获取命令;部分直接获取命令复制到了剪切板,自己启动arthas 后粘贴命令即可执行。LOGO2.4 idea 插件arthas idea 插件配置(项目级别)主要配置 spring context 实例,进而快速调用 springBean 的方法、环境变量等LOGO3.1 arthas 使用1.基本使用(以官网文档的项目作为示例)获得可执行 jar 包并运行curl-O http:/localhost/cache/5140214204010134/png/math-game.jar java-jar math-game
8、.jar启动 arthasjava jar arthas-boot.jar选择进程 attach$java-jar arthas-boot.jar*1:355422:71560 math-game.jarmath-game 进程是第 2 个,则输入 2,再输入回车/enter。Arthas 会 attach 到目标进程上,并输出日志:pid:71560time:2018-11-28 19:16:24$LOGO3.1 arthas 使用LOGO查看 dashboard输入 dashboard,按回车/enter,会展示当前进程的信息,按 ctrl+c 可以中断执行。thread 命令thread
9、 n 指定最忙的前 N 个线程并打印堆栈 thread-i 指定 cpu 占比统计的采样间隔,间隔为秒 thread-b 找出当前阻塞其他线程的线程thread id 显示线程信息jad 命令jad-source-only demo.MathGame 反编译时只显示源代码jad demo.MathGame main 反编译指定的函数jad demo.MathGame c 69dcaba4 使用指定的类加载器进行反编译LOGO3.1 arthas 使用watch 命令类名表达式待查看的方法ognl 表达式 条件表达式watch watch demo.MathGame primeFactors r
10、eturnObj 查看 primeFactors 方法的返回值trace 命令trace trace demo.MathGame run 监视 run 方法运行trace demo.MathGame run-n 5 监视 run 方法运行5 次trace demo.MathGame run#cost 100 监视 run方法运行,耗时超过 100 毫秒输出monitor 命令monitor monitor-c 5 demo.MathGame primeFactors 以 5秒为周期监控 primeFactors 方法stack 命令stack stack demo.MathGame primeFactors参考资料官方手册 http:/localhost/cache/5140214204010134/png/用户案例 Issues alibaba/arthas GitHub入门实践 arthas 入门最佳实践_汪小哥的博客-CSDN博客_arthas 实践视频教程 arthas 入门到精通最佳实践_哔哩哔哩_bilibili常用命令总结 xmind 文件arthas idea 使用文档 arthas idea plugin 使用文档 语雀()LOGO谢谢观看LOGO