爱上Java诊断利器之Arthas
1. Arthas是什么?
摘自Arthas的Github介绍:
Arthas is a Java Diagnostic tool open sourced by Alibaba.
Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.
大意为:Arthas是阿里开源的一个Java诊断工具,可以帮助开发人员在不修改代码或重启服务器的情况下快速定位线上问题。
听起来确实是我们的程序员的一大福利。比如,我们就遇到一种情况,Spring Boot应用中有个cron定时任务为每天凌晨1点启动执行,但是测试起来很不方便,总不能每次修改cron时间来让QC测试吧?这样虽然是方便了测试妹子,但是却徒增了我们开发时间和迭代次数啊!!!那Arthas到底是否能够满足我们需求呢?Go on...
2. 开启Arthas之旅
2.1 安装Arthas
- 方式1:下载arthas-boot.jar包的方式
wget https://alibaba.github.io/arthas/arthas-boot.jar
此时在你当前所在目录下会有个arthas-boot.jar包。

尝试下arthas:
# 启动arthas,会进入命令行交互状态
java -jar arthas-boot.jar
# 查看arthas命令手册
java -jar arthas-boot.jar -h

- 方式2:通过as.sh安装Arthas(强烈推荐)
# 该命令会下载 as.sh 到当前目录下
curl -L https://alibaba.github.io/arthas/install.sh | sh
尝试下arthas:
# 启动arthas,会进入命令行交互状态
./as.sh
# 查看arthas命令手册
./as.sh -h
2.2 开始使用
下面演示我们以as.sh为主。
首先我们启动arthas,会查看到我们当前server上部署的应用已经被探测到,当前我的server上只有一个应用程序,只需输入数字1,即可和该应用进行交互:
2.2.1 基础命令

- 通过
dashboard命令可以实时查看应用监控数据

- 通过
thread命令查看应用程序中所有线程情况

其中第一列为线程的ID。
- 通过
thread threadId命令查看指定线程状态信息- 比如我们要查看线程ID为506的线程状态信息:

- 当然,因为是命令行交互,也是支持管道流式操作:

通过
watch命令去查看方法的参数、返回值和异常信息- 通过
sc命令查看类的信息- 通过
sc yourFullClassName

- 通过
sc -d yourFullClassName*去查看JVM加载的类信息

- 通过
sc *yourClassName*去查看JVM加载的类信息

- 通过
- 通过
sm命令查看类的方法信息- case 1:
sm java.math.RoundingMode

- case 2:
sm -d java.math.RoundingMode

- case 3:
sm java.math.RoundingMode <init>

- case 1:
2.2.2 重头戏命令
通过
jad yourFullClassName去查看反编译后的完整代码信息
通过
jad --source-only yourFullClassName > /tmp/yourClassName.java导出反编译代码到临时目录

通过
vim /tmp/yourClassName.java进行编辑修改代码

通过
sc -d *yourClassName | grep classLoaderHash获取加载yourClassName的类加载器
通过
mc -c classLoaderHash /tmp/yourClassName.java -d /tmp重新用相同类加载器重新编译修改后的类(mc: Memory Compiler)

通过
redefine /tmp/yourFullClassName.class重新加载新的被编译的类文件
2.2.3 更多操作案例
参考资料
爱上Java诊断利器之Arthas的更多相关文章
- 带你上手阿里开源的 Java 诊断利器:Arthas
本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款阿里开源的 Java 诊断利器 Art ...
- Java诊断神器:Arthas常用功能
最新原文:https://www.cnblogs.com/uncleyong/p/14944401.html Arthas是Alibaba开源的Java诊断工具,功能很强大,它是通过Agent方式来连 ...
- Java 诊断工具 Arthas 教程学习笔记
Java 诊断利器 Arthas,是阿里的一款开源工具.Github-alibaba/arthas 上可以看到它的介绍.了解它,主要是最近对分析 Java 错误堆栈比较感兴趣,机缘巧合看到了它. 本文 ...
- java 诊断工具——Arthas
该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql! 接下来!今天的主角就登场了,阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 ja ...
- Alibaba Java诊断工具Arthas之快速安装和简单使用
Alibaba Java诊断工具Arthas简单介绍 : 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1.这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception ...
- Arthas Alibaba 开源 Java 诊断工具
Arthas 用户文档 English Docs Arthas(阿尔萨斯) 能为你做什么? Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,A ...
- Java诊断工具Arthas
Java诊断工具Arthas 1. Arthas简介 Arthas是阿里开源的一个线上java诊断工具,发现阿里还是挺喜欢开源一些技术的,造福人类.昨天试用了一下,发现真是强大,解决了我工作两年的很多 ...
- Java诊断利器Arthas
1 简介 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 ...
- Java诊断利器Arthas优雅排查生产环境
前言 Arthas 是Alibaba开源的Java诊断工具.在线排查问题,无需重启:动态跟踪Java代码:实时监控JVM状态.对分秒必争的线上异常,Arthas可帮助我们快速诊断相关问题. 下载安装 ...
随机推荐
- CNN基础框架简介
卷积神经网络简介 卷积神经网络是多层感知机的变种,由生物学家休博尔和维瑟尔在早期关于猫视觉皮层的研究发展而来.视觉皮层的细胞存在一个复杂的构造,这些细胞对视觉输入空间的子区域非常敏感,我们称之为感受野 ...
- Hibernate3运行原理
Hibernate的运行过程如下: 1.应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,2.并用这些信息生成一个SessionFactory对象,3. ...
- 【转载】网页JS获取当前地理位置(省市区)
眼看2014又要过去了,翻翻今年的文章好像没有写几篇,忙真的或许已经不能成为借口了,在忙时间还是有的,就像海绵里的水挤挤总会有滴.真真的原因是没有学习过什么新的技术,工作过程中遇到的问题也不是非常难并 ...
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题【代码手动切换,非AOP】
转: 利用Spring的AbstractRoutingDataSource解决多数据源的问题 多数据源问题很常见,例如读写分离数据库配置. 原来的项目出现了新需求,局方要求新增某服务器用以提供某代码, ...
- Spark任务踩到的坑
原因:文本编辑器导致多出来一个 “.”在首行
- 数学建模python matlab 编程(指派问题)
指派授课问题 现有A.B.C.D四门课程,需由甲.乙.丙.丁四人讲授,并且规定: 每人只讲且必须讲1门课:每门课必须且只需1人讲. 四人分别讲每门课的费用示于表中: 课 费用 人 A B C D 甲 ...
- python-Web-数据库-oracle
1.oracle体系结构 --------全局数据库,这里指物理磁盘上的数据库(物理结构,一个真实存在的磁盘目录),一般一台oracle服务器有1个全局数据库,文件占1G多.oracle允许一台 -- ...
- 【并行计算-CUDA开发】__syncthreads的理解
__syncthreads()是cuda的内建函数,用于块内线程通信. __syncthreads() is you garden variety thread barrier. Any thread ...
- 【并行计算-CUDA开发】#pragma unroll伪编译指令的使用
#pragma宏命令主要是改变编译器的编译行为,其他的参数网上资料比较多,我只想简单说下#pragma unroll的用法,因为网上的资料比较少,而且说的比较笼统,请看下面的一段代码 int main ...
- C#常用处理数据类型转换、数据源转换、数制转换、编码转换相关的扩展
public static class ConvertExtensions { #region 数据类型转换扩展方法 /// <summary> /// object 转换成string ...