阿里开源的Java诊断工具Arthas(阿尔萨斯)
作为大自然搬运工,只是为了帮助大家扩展视野.有兴趣建议直奔官网.
当你遇到以下类似问题而束手无策时,Arthas
可以帮助你解决:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
- 怎么快速定位应用的热点,生成火焰图?
Arthas
支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab
自动补全功能,进一步方便进行问题的定位和诊断。
快速安装启动:
curl -O https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar
打印帮助参数
java -jar arthas-boot.jar -h
Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 回车
执行即可:
curl -L https://alibaba.github.io/arthas/install.sh | sh
上述命令会下载启动脚本文件 as.sh
到当前目录,你可以放在任何地方或将其加入到 $PATH
中。直接在shell下面执行./as.sh
,就会进入交互界面。
以Java Agent的方式启动
下载全量的arthas zip包,解压之后以 -javaagent
的参数指定arthas-agent.jar
来启动:
java -javaagent:/tmp/test/arthas-agent.jar -jar arthas-demo.jar
Windows下安装使用
arthas\arthas-packaging-3.1.4-bin\ 下面有一个arthas-boot.jar包
执行 (需要保证执行该程序的用户需要和目标进程具有相同权限)java -jar arthas-boot.jar
命令行会找到本机所有正在运行的Java进程并编号输入编号进入相应的Java进程
阿里提供了比较友好的WebConsole,可以在浏览器输入127.0.0.1:8563 进行访问
当我们进入这个界面之后,想了解我们的JAVA进程内部的任何信息,都可以找到相关命令去获取信息,每个命令后都可加相关参数去查询更精准的所需信息
dashboard 当前系统的实时数据面板,按 ctrl+c 退出。
thread 查看当前线程信息,查看线程的堆栈
jvm 查看当前JVM信息
sysprop 查看当前JVM的系统属性(System Property
)
sysenv 查看当前JVM的环境属性(System Environment Variables
)
vmoption 查看,更新VM诊断相关的参数
perfcounter 查看当前JVM的 Perf Counter信息
sc 查看JVM已加载类信息
sm 查看已加载类的方法信息
jad 反编译指定已加载类的源码
watch 让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值
、抛出异常
、入参
,通过编写 OGNL 表达式进行对应变量的查看
trace 方法内部调用路径,并输出方法路径上的每个节点上耗时
命令还有很多,这里就不一一列举,此处仅为抛砖引玉,欲知更多相关内容,请再次奔向官网,官网也有中文文档,对于国人开发者也比较友好