Arthas简介

当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:

  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

  • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

  • 是否有一个全局视角来查看系统的运行状况?

  • 有什么办法可以监控到JVM的实时运行状态?

Arthas 是Alibaba开源的Java诊断工具,Arthas支持JDK 6+,支持Linux/Mac/Windows,支持命令行交互模式、 Tab 自动补全功能,方便进行问题的定位和诊断。

下载Arthas

wget https://arthas.aliyun.com/arthas-boot.jar

下载官方demo

demo用于模拟java应用,当然如果你已经有了监控的java应用也可以直接用自己的。

下载之后启动demo应用

wget https://arthas.aliyun.com/arthas-demo.jarjava -jar arthas-demo.jar

启动/退出arthas

java -jar arthas-boot.jar
  • quit:只是退出当前的连接。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时执行java -jar arthas-boot.jar可以直接连接上。

  • exit:和quit命令相同

  • stop:退出arthas

arthas启动后,会会自动列出本机所有的Java进程,用户可以选择需要诊断的目标进程,演示机器上只有arthas-demo,所以输入进程序号1 ,再按回车即可

常用arthas命令

命令 说明
cls 清空当前屏幕区域
session 查看当前会话的信息,显示当前绑定的pid以及会话id
reset 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端stop时会重置所有增强过的类
version 输出当前目标 Java 进程所加载的 Arthas 版本号
history 打印历史命令,打印出你在使用arthas过程中输入了哪些命令。
keymap 输出arthas的快捷键映射表
dashboard 查看当前系统的实时数据面板,例如:服务器thread信息、内存memory、GC回收等情况
thread 查看线程的堆栈信息
jvm 打印出jvm的信息,包括参数和变量,以及用的jvm名字、系统等
sysprop 查看当前JVM的系统属性(System Property)
sysenv 查看当前JVM的环境属性(System Environment Variables)
vmoption 查看,更新VM诊断相关的参数
perfcounter 查看当前JVM的 Perf Counter信息
logger 查看logger信息,更新logger level(级别)
mbean 这个命令可以便捷的查看或监控 Mbean 的属性信息
getstatic 通过getstatic命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name,推荐直接使用ognl命令,更加灵活。
ognl 执行ognl表达式,此命令可动态执行代码
sc 查看JVM已加载的类信息,可以查看类在哪个jar包里面
sm 查看已加载类的方法信息
dump dump 已加载类的 bytecode 到特定目录
heapdump dump java heap, 类似jmap命令的heap dump功能
vmtool vmtool 利用JVMTI接口,实现查询内存对象,强制GC等功能
jad 反编译指定已加载类的源码
classloader 查看classloader的继承树,urls,类加载信息
mc Memory Compiler/内存编译器,编译.java文件生成.class
retransform 加载外部的.class文件,动态重新加载 jvm已加载的类
redefine 加载外部的.class文件,redefine jvm已加载的类。这个方式只是修改运行时内存,class文件并没有改变,服务重启就失效了,推荐使用 retransform 命令
monitor monitor方法执行监控
watch 方法执行数据观测,让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。
trace 方法内部调用路径,并输出方法路径上的每个节点上耗时,trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
stack 输出当前方法被调用的调用路径
tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
profiler profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。
cat 打印文件内容,和linux里的cat命令类似
echo 打印参数,和linux里的echo命令类似
grep 类似传统的grep命令
base64 base64编码转换,和linux里的 base64 命令类似
tee 类似传统的tee命令, 用于读取标准输入的数据,并将其内容输出成文件
pwd 返回当前的工作目录,和linux命令类似
auth 验证当前会话
options 系统的配置开关,可开启和关闭arthas

命令说明

version输出当前目标 Java 进程所加载的 Arthas 版本号

history打印历史命令,打印出你在使用arthas过程中输入了哪些命令

keymap输出arthas的快捷键映射表

dashboard查看当前系统的实时数据面板,例如:服务器thread信息、内存memory、GC回收等情况

ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应。NAME: 线程名

GROUP: 线程组名

PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高

STATE: 线程的状态

CPU%: 线程的cpu使用率。比如采样间隔1000ms,某个线程的增量cpu时间为100ms,则cpu使用率=100/1000=10%

DELTA_TIME: 上次采样之后线程运行增量CPU时间,数据格式为秒

TIME: 线程运行总CPU时间,数据格式为分:秒

INTERRUPTED: 线程当前的中断位状态

DAEMON: 是否是daemon线程

thread查看线程的堆栈信息

  • thread -n 5:打印前5个最忙的线程并打印堆栈

  • thread -all :显示所有匹配的线程

  • thread -n 3 -i 1000 :列出1000ms内最忙的3个线程栈

  • thread –state WAITING,查看指定状态的线程,(TIMED_WAITI、WAITING、RUNNABLE等

  • thread -b:找出阻塞其他线程的线程,当出现死锁后,会提示你出现死锁的位置,代码如下

jvm打印出jvm的信息,包括参数和变量,以及用的jvm名字、系统等

jvm的数据汇总分类如下

  • runtime:包括jvm开始时间,启动参数,class_path等

  • class-loading :已加载类的数量,总共加载类数量,已卸载类的数量

  • garbage-collectors:显示使用的垃圾收集器及垃圾收集次数

  • memory :堆内存空间使用情况

  • thread:线程总数,守护线程数,死锁数量

thread线程信息如下

  • COUNT: JVM当前活跃的线程数

  • DAEMON-COUNT: JVM当前活跃的守护线程数

  • PEAK-COUNT: 从JVM启动开始曾经活着的最大线程数

  • STARTED-COUNT: 从JVM启动开始总共启动过的线程次数

  • DEADLOCK-COUNT: JVM当前死锁的线程数

jad反编译指定已加载类的源码,示例反编译Main Class

jad demo.MathGame

stack输出当前方法被调用的调用路径

stack demo.MathGame

watch方法执行数据观测,让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。

watch demo.MathGame primeFactors returnObj

trace 命令能主动搜索方法调用路径,,并输出方法路径上的每个节点上耗时,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

调用链属性说明

  • thread_name :线程名称

  • id:内部线程id

  • is_daemon :是否为守护线程

  • priority:线程优先级

  • TCCL:类加载器

trace demo.MathGame run

tt 用于方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

  • t 表示这个参数的表明希望记录下类 Test 的 show() 方法的每次执行情况。

  • -n 3 :当你执行一个调用量不高的方法时可能你还能有足够的时间用 CTRL+C 中断 tt 命令记录的过程,但如果遇到调用量非常大的方法,瞬间就能将你的 JVM 内存撑爆。此时你可以通过 -n 参数指定你需要记录的次数,当达到记录次数时 Arthas 会主动中断tt命令的记录过程,避免人工操作无法停止的情况。

tt -t -n 3 demo.MathGame run

欢迎大家关注我的订阅号,会定期分享一些关于测试相关的文章,有问题也欢迎一起讨论学习!

Java诊断工具Arthas使用说明相关推荐

  1. Java诊断工具-Arthas入门与实践

    Java诊断工具-Arthas入门与实践 目录 Java诊断工具-Arthas入门与实践 什么是Arthas? Arthas能做什么? 我在哪里可以下载Arthas? 快速入门 1. 下载并运行mat ...

  2. 阿里Java诊断工具 arthas - 生产环境反编译动态修改程序调试应用

    阿里Java诊断工具 arthas - 生产环境反编译动态修改程序调试应用 一.arthas 上篇文章我们借助arthas监测线上系统的运行信息.排查程序运行缓慢问题,尽管这样已经非常好了,但是还是会 ...

  3. 阿里开源的Java诊断工具——Arthas

    文章目录 1 问题背景 2 前言 3 Arthas有什么作用 4 入门小实践 5 SpringBoot应用.Arthas.Arthas Tunnel Server之间的关系 1 问题背景 线上生产环境 ...

  4. Java 诊断工具Arthas初识、安装及试用

    目录 功能 使用方式 使用实例 参考 功能 监控jvm运行状态 定位应用热点,生成火焰图 具体jar包来源等 使用方式 win10本地方式 linux本地方式 docker镜像方式 idea插件方式 ...

  5. 阿里巴巴开源的 Java 诊断工具Arthas【入门篇】

    前面: 各位老铁们,好久没和大家见面了,最近一直躲在家里不敢出来门,过着像猪的生活..... 吃喝拉撒睡觉.远程在家办公一段时间也是遇到了比较棘手的问题.所以没有顾得上来和大家分享了,不过大家放心,从 ...

  6. 阿里内部的那个牛逼带闪电的Java诊断工具arthas终于开源了

    在阿里巴巴内部,有很多自研工具供开发者使用,其中有一款工具,是几乎每个Java开发都使用过的工具,那就是Arthas,这是一款Java诊断工具,是一款牛逼带闪电的工具.该工具已于2018年9月份开源. ...

  7. Arthas(1):Java诊断工具Arthas入门教程

    文章目录 前言 第一节 Arthas 能为你做什么? 第二节 环境准备 第三节 快速入门 1. 启动math-game 2. 启动arthas 3. 查看dashboard 4. 通过 thread ...

  8. java诊断工具-Arthas(阿尔赛斯)入门

    Arthas是什么? Arthas 是Alibaba开源的Java诊断工具. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 E ...

  9. Java诊断工具 Arthas

    是什么         Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱.在线排查问题,无需重启:动态跟踪Java代码:实时监控JVM状态.可以解决如下常见问题: 这个类从哪个 j ...

最新文章

  1. 【Android】Activity生命周期(亲测)
  2. AJPFX关于StringBuffer类的总结
  3. idea查看类和方法的结构图
  4. PlayFab(二)如何通过Demo应用来进一步熟悉Playfab
  5. angularjs 元素重复指定次数_[LeetCode] 442. 数组中重复的数据
  6. SAP License:统驭科目的集成修改
  7. linux之strings命令
  8. Linux FastDFS 分布式文件系统安装
  9. deep_learning 03. tf.nn.rnn_cell.MultiRNNCell()
  10. Open Inventor与Coin3D开发环境配置/Vs2017+Qt+coin3D配置方法,实测可用
  11. 计算机829大纲,829计算机基础考试大纲
  12. Linux系统手机投屏实现电脑控制手机(Windows)
  13. cad断点快捷键_CAD命令:打断(BREAK)命令的使用技巧
  14. 【有始有终,不让自己的付出辜负了自己期望 】
  15. win10联机玩红警2
  16. 六年级小学生做的个人网站
  17. 计算机男朋友好处,程序猿男朋友的好处
  18. 柜台收取西联汇款经验(网友分享)
  19. pyopenpose文档
  20. 关于socket error 10054

热门文章

  1. JS——canvas基础及其应用
  2. Java创建文件夹及文件
  3. [51MCU] Chapter1:芯片引脚
  4. CSS制作太极八卦图及衍生物
  5. (转)分辨率 PPI DPI概念定义详解
  6. 指令周期 机器周期 状态周期 振荡时钟周期(时钟周期)
  7. 【CET4四级英语】【单词】英语四级高频词汇(1)
  8. 关于植物大战僵尸| Plants VS Zombies 运行时 Fatal Error
  9. JavaWeb_Eclipse的使用
  10. 在MATLAB上运行Python示例