Java 诊断工具:greys-anatomy
诞生
很早的时候,我们使用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进程,仿佛在本地一般