【greys使用】阿里greys在线诊断工具
Greys是一个Java进程的异常诊断工具,可以在不停止程序的前提下,对一些问题进行检测。这个框架主要是采用Java的探针技术,可以做到动态修改java的字节码技术。前提是Jdk版本6+。(premain是Java SE5开始就提供的代理方式,由于其必须在命令行指定代理jar,并且代理类必须在main方法前启动。因此,要求开发者在应用前就必须确认代理的处理逻辑和参数内容等等。在有些场合下,premain代理方式不能满足需求。为解决运行时启动代理类的问题,Java SE6开始提供了在应用程序的VM启动后在动态添加代理的方式,即agentmain方式。 )
一、我的经历
我是一个Java开发人员,第一次使用greys是2年前,当时开发的项目是一个大型系统,开发人员比较多。但是,开发和测试环境都只有一套。这样就有一个问题,那就是每个人代码提交,编译部署的时候,频率需要得到控制。因为大家使用的都是同一套系统,不能因为你一个人去重启相关的服务,从而影响到其他服务。当时,我就迫切地想开发一套工具,可以在程序运行的时候,直接对程序已有的功能进行调试。后面,我在百度上看到greys的介绍,虽然资料偏少,但是这已经成功引起了我的注意。于是,我就从github上寻找这个工具的相关代码。后面,自己在空闲时间试用了一段时间。经过验证,这是一个值得使用的好工具!所以,我想今天空闲时间把这个工具分享给大家。
二、安装使用
1.下载安装
下载代码:
git clone https://github.com/oldmanpushcart/greys-anatomy.git
切换到bin目录:
cd greys-anatomy/bin/
执行打包命令:
./greys-packages.sh
2.开始使用
2.1 目录介绍
bin目录下有以下这些脚本文件:
ga.sh(greys-attach,我看着就检测是否可以对程序进行在线诊断)
greys.sh(这个是我最经常使用的脚本,检测全靠这个,内嵌gs.sh)
greys-packages.sh(本地编译打包安装,内嵌install-local.sh)
gs.sh(greys-shell,主要是通过一些程序的命令行完成一些操作)
install.sh(程序远程安装的一种方式)
install-local.sh(本地安装)
2.2 正式使用
2.2.1 直接运行 ./greys.sh 【进程号】,就可以对程序进行一些诊断了

2.2.2 支持的命令

2.2.2 具体命令介绍
注意:
1.所有的命令都可以使用【help 命令】获得所有配置信息,比如【help sc】就可以获得sc的用法
2.命令阻塞的时候,可以使用ctrl+d键取消执行
【sc】Search-Class的简写,可以展示所有已加载的Class信息
【用法】sc
class-pattern 类名表达式匹配
method-pattern 方法名表达式匹配
[d] 输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、类加载器等详细信息。
[f] 输出当前类的成员变量信息
[E] 支持正则表达式匹配
【例子】
搜索类:

查看类明细:

【sm】Search-Method的简写,可以展示所有已经加载Class下的方法信息
【用法】sm
class-pattern 类名表达式匹配
method-pattern 方法名表达式匹配
[d] 展示每个方法的详细信息
[E] 支持正则表达式匹配
【例子】
搜索方法:

查看方法明细:

【monitor】可以对方法进行监控
【用法】monitor
c统计周期(单位:秒),默认值为120秒
【说明】
Affect(class-cnt:1 , method-cnt:1) cost in 24 ms. == 这句说明有对我们程序的类和方法进行增强。如果cnt=0,说明增强失败了。
结果信息有:
timestamp 时间戳
class Java类
method 方法(构造方法、普通方法)
total 调用次数
success 成功次数
fail 失败次数
rt 平均RT
fail-rate 失败率
【例子】
监控成功/失败次数:

【watch】可以查看方法的输入、输出、异常情况
【用法】watch
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
condition-express条件表达式
express观察表达式
[b]在**方法调用之前**观察
[e]在**方法异常之后**观察
[s]在**方法返回之后**观察
[f]在**方法结束之后**(正常返回和异常返回)观察
【例子】
查看输入参数:

查看输出结果:

【tt】记录时间,方法耗时,是否返回,是否异常等信息
【用法】tt
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
condition-express条件表达式
n 执行次数
【说明】
INDEX时间片段记录编号,每一个编号代表着一次调用,后续tt还有很多命令都是基于此编号指定记录操作,非常重要。
PROCESS-ID过程编号,我们认为同一个线程的一次同步调用为一个过程
TIMESTAMP方法执行的本机时间,记录了这个时间片段所发生的本机时间
COST(ms)方法执行的耗时
IS-RET方法是否以正常返回的形式结束
IS-EXP方法是否以抛异常的形式结束
OBJECT执行对象的hashCode(),注意,曾经有人误认为是对象在JVM中的无力内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体
CLASS执行的类名
METHOD执行的方法名
【例子】
统计方法耗时:

【stack】打印调用的堆栈信息
【用法】stack
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
condition-express条件表达式
[n:]命令执行次数
[E]支持正则表达式匹配
【例子】
打印方法的堆栈信息
p
【ptrace】打印方法的详细执行过程
【用法】ptrace
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
condition-express条件表达式
[t]记录下渲染路径上所有方法的入参与返回值,记录下的返回值可以与tt命令联动
[n:]命令执行次数
[E]支持正则表达式匹配
[path:]渲染路径表达式匹配,该参数可多次使用
[Epath:]正则表达式渲染路径表达式匹配,该参数可多次使用
【例子】
打印方法的详细执行过程:

【trace】打印方法的详细执行过程
【用法】trace
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
condition-express条件表达式
[n:]命令执行次数
[E]支持正则表达式匹配
...
【例子】
打印概要执行过程:

【session】查看会话信息
【用法】session
【例子】
查看会话信息:

【version】查看版本信息
【用法】version
【例子】
查看版本信息:

【jvm】查看JVM信息
【用法】jvm
【例子】
查看JVM信息

【top】查看线程占用的cpu信息
【用法】top
【例子】
查看线程占用的cpu信息:

【reset】重置增强类
【用法】reset
【例子】
重置增强类:

【quit】退出控制台【shutdown】删除并退出控制台
【用法】quit/shutdown
【例子】
退出控制台:

关闭并退出控制台:

3 使用不足之处
3.1 回格键(Backspace)无法识别,经常输入错误,无法回删命令;
3.2 方向键使用上一条命令还不够人性化,经常很多命令杂在一起显示;
3.3 如果一个类被增强,则会出现多个诊断结果(类本身+增强后的类)。
以上是我的使用介绍,谢谢观看。下次出一篇源码解析,欢迎继续关注!
【greys使用】阿里greys在线诊断工具的更多相关文章
- 【Java】15分钟快速体验阿里Java诊断工具Arthas
[墙裂推荐]15分钟快速体验阿里Java诊断工具Arthas : https://alibaba.github.io/arthas/arthas-tutorials?language=cn&i ...
- Linux目录同步到阿里云OSS工具ossutil
Linux目录同步到阿里云OSS工具ossutil 背景 最近公司服务用户激增,常规文件服务器不能满足需求,严重影响性能,决定将静态文件迁移到阿里云OSS,用来解决性能问题,提高用户体验.毕竟之前 ...
- 【源码解析】阿里在线诊断工具greys源码
撸起袖子加油干!开门见山! 一.源码下载 下载代码: git clone https://github.com/oldmanpushcart/greys-anatomy.git 二.源码分析 2.1 ...
- greys java在线诊断工具
greys是一个开源的github项目,用来分析运行中的java类.方法等信息. greys工具地址: https://github.com/oldmanpushcart/greys-anatomy/ ...
- 阿里创新自动化测试工具平台--Doom
摘要: 阿里内部诞生一了个依赖真实流量用于自动回归的自动化测试平台,通过创新的自动mock机制不仅支持读接口的回归验证,同时支持了写接口验证,在内部产生了极大价值,有价值的东西就应该分享,目前该工具已 ...
- 阿里云OSS工具类
[前言] 我们上家公司的存储系统用的是FastDFS(智能一代云平台(二十八):对前后端分离和FastDFS的使用的再理解):现在在职的公司用的是阿里云的OSS(OSS的官方文档),在工作的时候整理一 ...
- 阿里出品Excel工具EasyExcel使用小结
前提 笔者做小数据和零号提数工具人已经有一段时间,服务的对象是运营和商务的大佬,一般要求导出的数据是Excel文件,考虑到初创团队机器资源十分有限的前提下,选用了阿里出品的Excel工具EasyExc ...
- 【dataX】阿里开源ETL工具——dataX简单上手
一.概述 1.是什么? DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.Postgre.HDFS.Hive.ADS.HBase. ...
- 初识阿里开源诊断工具Arthas
上个月,阿里开源了一个名为Arthas的监控工具.恰逢近期自己在写多线程处理业务,由此想到了一个问题. 如果在本机开发调试,IDE可以看到当前的活动线程,例如IntelliJ IDEA,线程是运行还是 ...
随机推荐
- 整合Atomikos、Quartz、Postgresql的踩坑日记
前言 由于业务需要,在单体Spring Boot项目中需要引入分布式事务,来保证单体应用连接的多个数据源的事务统一. 而说到分布式事务,小伙伴们肯定会想到阿里的Seata,阿里Seata强大的AT模式 ...
- K8S(18)容器环境下资源限制与jvm内存回收
K8S(18)容器环境下资源限制与jvm内存回收 目录 K8S(18)容器环境下资源限制与jvm内存回收 一.k8s中的java资源限制与可能的问题 方案1:通过JVM的Xms和Xmx参数限制 方案2 ...
- 『动善时』JMeter基础 — 3、JMeter插件管理
JMeter是一个Java开发的开源软件,开源的软件有一个好处,就是会有很多第三方开发出来的插件,使得JMeter在处理某一些功能的时候更加的方便.并且这些插件拿过来就可以使用,完全免费的. 我们安装 ...
- Android NDK编程之Android.mk和Application.mk
Android编程使用NDK必须创建一个jni文件夹,并且jni文件里一般包含有C/C++的源码文件.Android..mk文件.Application.mk文件(可选),Android.mk文件的编 ...
- Dalvik模式下在Android so库文件.init段、.init_array段构造函数上下断点
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78244766 在前面的博客<在Android so文件的.init..ini ...
- hdu4995 (不错的小模拟)
题意: 输入n,m,k ,给你n个点,他们在一个一维坐标上,每个点有两个值,一个是坐标,另一个是价值,然后有m组操作,每次操作给一个坐标,意思就是把当前这个坐标的点距离他最近的k个点(相等 ...
- Windows核心编程 第十一章 线程池的使用
第11章 线程池的使用 第8章讲述了如何使用让线程保持用户方式的机制来实现线程同步的方法.用户方式的同步机制的出色之处在于它的同步速度很快.如果关心线程的运行速度,那么应该了解一下用户方式的同步机制是 ...
- SQL注入平台(sqli-labs)搭建提示Fatal error: Uncaught Error:
笔者搭建该平台时用的是phpstudy,估计wampserver和xmapp也适用 搭建过程中出现错误 在浏览器进入sqli-labs时有以下提示 Fatal error: Uncaught Erro ...
- Day006 可变参数
可变参数(不定项参数) 在jdk1.5开始,java支持传递同类型的可变参数给一个方法. 在方法声明中,在指定参数类型后加一个省略号(...). 一个方法只能指定一个可变参数,它必须是方法的最后一个参 ...
- vscode 将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹
一.将本地项目上传到github 1.创建本地仓库(文件夹) mkdir study//创建文件夹studycd study //进入study文件夹 2.通过命令git init把这个文件夹变成Gi ...