greys-anatomy

一、安装

1、在线安装:curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|bash

当前目录下会出现:greys.sh

默认的安装路径:/root/.greys/lib/1.7.6.6/greys

 

二、入门

1、./greys.sh vmid@ip:port

注:如不指定ip:port,则默认为127.0.0.1:3658

注:启动后,greys会打开客户端(ga?>),且后台会有个java进程(这个进程的端口号为3658)

验证:netstat -anp|grep LIST

2、会话也任务,session默认为5min后自动关闭

a、立即返回:敲下命令后Server端立即返回最终结果,后续无持续反馈信息,释放Client对输入的锁定,重新开放让用户输入信息,比如version、sc、sm等。

b、等待终止:等待中止的命令则是需要用户主动输入Ctrl+D完成的命令中止操作。命令执行后无法立即返回最终结果,而是不断的将中间产生的输出源源不断的输出到客户端中,这种命令比如stack、monitor等。


3、重要类结构

用于watch/tt命令,grovvy表达式的重要数据结构

Advice
   |
   +--ClassLoader loader    (ClassLoader)
   +--Class<?>    clazz     (目标类)
   +--GaMethod    method    (目标方法,包括普通方法和构造函数)
   +--Object[]    params    (调用参数)
   +--Object      returnObj (返回值)
   +--Throwable   throwExp  (抛出异常)
在表达式中直接使用变量名,例如:watch -b *StringUtil* isEmpty params[0].length()

4、特点:

(1)多人并行操作(基于C/S架构的任务模式

a、应用管理员拥有JVM进程权限,由他来首先在目标JVM上启动Greys
b、技术专家A和B平时没有对应机器的权限,但只要网络能访问,他们可以通过指定ip:port直接访问目标机器的JVM进程,仿佛在本地一般

(2)、sudo支持

成熟的线上管理环境一般都不会直接开放JVM部署用户权限给你,而是通过sudo-list来控制和监控用户的越权操作。由于greys.sh脚本中会对当前用户的环境变量产生感知,所以需要加上-H参数
如:sudo -u admin -H ./greys.sh 12345

(3)、TELNET的支持

Greys支持通过telnet来访问服务端,如果当你手头的机器没有安装Greys的客户端,你可以简单的通过telnet命令来进行访问。如:telnet 10.232.12.113 3658

 

三、命令

1、sc命令:“Search-Class”的简写,这个命令能搜索出所有已经加载到JVM中的Class信息。

例:sc -df *StartControllerr

2、sm命令:“Search-Method”的简写,这个命令能搜索出所有已经加载了Class信息的方法信息。

例:sm -d *StartControllerr *

3、monitor命令:监控该方法被调用的信息

例:monitor -c 5 com.share.dao.StartDao testDao

4、trace命令:帮你定位和发现因RT高而导致的性能问题缺陷
每次只能跟踪一级方法的调用链路,目前暂时没有精力去解决往下几个层级的调用。

例:trace com.share.dao.StartDao testDao

打印信息如下:

`---+Tracing for : thread_name="http-nio-8080-exec-1" thread_id=0x12;is_daemon=true;priority=5;
    `---+[8001,8001ms]com.share.dao.StartDao:testDao()
        +---[3001,3001ms]java.lang.Thread:sleep(@16)
        +---[3001,0ms]java.io.PrintStream:println(@17)
        +---[3001,0ms]com.share.User:toString(@18)
        +---[3001,0ms]java.io.PrintStream:println(@18)
        `---[8001,5000ms]com.share.dao.StartDao:testDao11(@19)

5、ptrace命令:命令为trace命令的强化版,通过指定渲染路径来完成对方法执行路径的渲染过程

例:ptrace -t com.share.dao.StartDao testDao --path=*StartDao*

打印信息如下:

`---+pTracing for : thread_name="http-nio-8080-exec-1" thread_id=0x12;is_daemon=true;priority=5;process=1002;
    `---+[8002,8002ms]com.share.dao.StartDao:testDao(); index=1004;
        `---[8002,5001ms]com.share.dao.StartDao:testDao11(); index=1003;

6、watch命令:能方便的让你观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参

例:watch -b com.share.dao.StartDao testDao params[0] -x 1

注:greys会将输出的对象按照指定层级进行剥开。-x 1表明展开第1层级。

打印信息如下:

@User[
    name=@String[sunxj],
    age=@Integer[26],
]

7、tt命令:记录下当时方法调用的所有入参和返回值、抛出的异常

-t:记录下类*Test的print方法的每次执行情况
-n 3:该方法调用3次自动结束本次事务(同:ctrl+d)

例:tt -t -n 3 com.share.dao.StartDao testDao    之后执行:tt -i process-id

 

四、文档

官网

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
诞生 很早的时候,我们使用BTrace排查问题,在感叹BTrace的强大之余,也曾好几次将线上系统折腾挂掉。2012年淘宝的聚石写了HouseMD,将 常用的几个Btrace脚本整合在一起形成一个独立风格的应用,但其核心代码用的是Scala,我们没这方面的编程维护经验,所以只好艳羡HouseMD 的才思敏捷而无法在其上增加功能。 于是乎,Greys诞生了。 PS:目前Greys仅支持Linux/Unix/Mac上的Java6 ,Windows暂时无法支持 Greys是一个java进程执行过程中的异常诊断工具。 在不中断程序执行的情况下轻松完成问题排查工作。 和HouseMD一样,Greys-Anatomy取名同名美剧“实习医生格蕾”,目的是向前辈致敬。代码编写的时候参考了BTrace和HouseMD两个前辈的思路。 目标群体 有时候突然一个问题反馈上来,需要入参才能完成定位,但恰恰没有任何日志。回去加上重新部署,一杯咖啡时间过去了,是不是很崩溃? 当你经过反复这样几次折腾之后变得聪明了,在自己的代码的所有入参和出参地方都加上debug日志,但这次问题似乎暴露在别人的代码中了...是不是很无奈? 突然遇到线上一个性能问题无法确定到底是哪个环节的耗时,只能反复抓jstack猜,还有没有办法可以好好的过日子啦? 遇到以上问题时,你就是我们这类工具的目标客户,此类工具能利用Java6的Instrumentation特性,动态增强你所指定的类,获取你想要到的信息。 我们的座右铭 让程序解决繁琐的事情 特性功能 交互方式 命令行交互 内置功能 查看加载类,方法信息 方法执行监控(调用量,成功失败率,响应时间) 方法执行数据观测(参数,返回结果,异常信息等) 方法执行数据记录 性能开销渲染 方法执行数据自定义观测(js脚本) 查看方法调用堆栈 软件特点 纯Java实现的开源项目 安装使用便捷,仅一个jar包 可无需重启JVM进行CT式诊断 Groovy表达式展开变量,方便你查看入参、出参、异常、当前对象的各种属性细节 常用分析命令集成,monitor、trace等 观察变量的出入参 时间隧道,tt命令能以时间维度纪录下监控期内的每一次调用环境 多人并行协作 基于C/S架构的任务模式甚至能让多人同时远程到同一进程上执行不同的指令、脚本,非常适合团队一起进行线上问题排查与跟踪。Greys采用纯Java编写并留有良好的扩展,如果你有需求,只要你会Java,就可以为你自己编写想要的功能。 Greys最有利的武器是他的ONGL表达式,能让你在感受到HouseMD集成功能便利的同时,也能发挥出自定义Btrace脚本的灵活。 应用管理员拥有JVM进程权限,由他来首先在目标JVM上启动Greys 技术专家A和B平时没有对应机器的权限,但只要网络能访问,他们可以通过指定ip:port直接访问目标机器的JVM进程,仿佛在本地一般 标签:greys
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值