很早的时候,我们使用BTrace排查问题,在感叹BTrace的强大之余,也曾好几次将线上系统折腾挂掉。2012年淘宝的聚石写了HouseMD,将常用的几个Btrace脚本整合在一起形成一个独立风格的应用,但其核心代码用的是Scala,我们没这方面的编程维护经验,所以只好艳羡HouseMD的才思敏捷而无法在其上增加功能。
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线上调试代码 软件的说明文档地址:https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf 文件位置: >cd /usr/greys 如何获取pid: >ps -ef|grep java 然后从输出中找到你需要的Java进程 如进程号为7737 启动脚本: >/usr/greys/greys.sh 7737 所有命
文档地址:https://github.com/oldmanpushcart/greys-anatomy/wiki curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|sh jps 拿到进程id后 sudo -u admin ./greys.sh 140509 //这个是监控调用耗时数量什么的 monitor -c 5 *MobileDA
Greys是一个JVM进程执行过程中的异常诊断神器。 在不中断程序执行的情况下轻松完成JVM相关问题排查工作。目前Greys仅支持Linux/Unix/Mac上的Java6+,Windows暂时无法支持。 使用场景 例如打logger,开发环境一般有五种情况: 1、异常情况,打error 2、警告情况,打warm 3、非本系统调用入口、任务等,logger入参和结果 4、本系统调用,debug入参
JVM进程执行过程中的异常诊断工具-Greys 一、简介 我们平时在线上或者开发中会遇到各种性能、功能等问题,在运行过程中需要查看方法入参、返回值,或者方法执行的堆栈时间,或者jar冲突时类加载来自那个jar包等问题。我们在开发过程中,可能会打印log日志、手动去打印入参、返回值等,或者自己实现简单的profile方法,代码侵入性大且效率较低;另外我们可以使用类似btrace工具去跟踪,这需要自己
转载自:https://www.iflym.com/index.php/code/201801170001.html greys是一个使用java management tool进程注入javaagent实现在线系统的诊断一个工具。原github为(https://github.com/oldmanpushcart/greys-anatomy),其主要的功能在于系统不停机的情况下。可以查看系统中的
greys是一个开源的github项目,用来分析运行中的java类、方法等信息。 greys工具地址: https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf 一键安装: git clone https://github.com/oldmanpushcart/greys-anatomy.git 运行./greys.sh进入交互命
安装 curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|sh ./greys.sh 24787 https://github.com/oldmanpushcart/greys-anatomy 使用手册 https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf 命令
介绍 一个底层调试工具,比Btrace来的更简单。目前好像是淘宝的同学在维护。 编译,安装和运行 下载 git clone https://github.com/oldmanpushcart/greys-anatomy.git 编译 cd ~/bin && sh ./greys-packages.sh 安装 拷贝target目录下生成的zip文件,并解压;解压后执行 install-local.s
1、greys是什么 如果想在线上debug一个方法或者想看方法的返回,不需要申请线上debug,不需要重新加日志重新发布,直接watch指定的函数就可以看到调用结果的情况下有什么好的工具?答案是greys。 Greys是一个全新在线诊断工具。 2、greys原理 在说明greys原理之前我们看看jvm的attach机制,attach机制是jvm提供一种jvm进程间通信的能力,能让一个进程传命令给
./greys -pid 9999 -port 3658 monitor -class .*ScheduleServiceImpl.* -method .*mediaInfoTaskService.* -cycle 10 profiler -class com.yt.ytdeep.service.ScheduleServiceImpl -method .* -probe-class .*
基于字节码监控运行中代码的工具,使用场景很多,监控某个java代码的某个包某个类某个方法的调用次数,响应时间,失败率等信息
应用程序通常会通过抛出另一个异常来响应异常。 实际上,第一个异常引起第二个异常。 它可以是非常有助于用户知道什么时候一个异常导致另一个异常。 “异常链(Chained Exceptions)”帮助程序员做到这一点。 以下是Throwable中支持异常链的方法和构造函数。 Throwable getCause() Throwable initCause(Throwable) Throwable(St
如果 Flarum 无法安装或者是没有按照预期运行,第一件需要做的事情就是再次检查你的环境是否达到了系统要求。如果你缺失部分 Flarum 的依赖项(例如 PHP 的 fileinfo 扩展),你将需要先处理这些问题。 接下来,你应该花上几分钟在支持论坛和问题追踪器内检索。有可能有人已经汇报了这个问题,或者解决方案正在讨论,或者已经有解决方案。在检索过后,如果你仍然没有发现关于这个问题的信息的话,
Composer默认使用Winston日志记录模块,并使用Config模块查找任何配置信息。如果没有找到,那么将使用一组默认值。 如果没有设置配置文件,配置模块会写出警告。例如。WARNING: No configurations found in configuration directory。如果您对默认值感到满意,并且不希望在应用程序中使用配置,则可以使用环境变量来抑制这种情况。在这里查看更
什么是抓取诊断 抓取诊断工具,可以让站长从百度蜘蛛的视角查看抓取内容,自助诊断百度蜘蛛看到的内容,和预期是否一致。每个站点每周可使用70次,抓取结果只展现百度蜘蛛可见的前200KB内容。 抓取诊断工具能做什么 目前抓取诊断工具有如下作用: 1、诊断抓取内容是否符合预期,譬如很多商品详情页面,价格信息是通过JavaScript输出的,对百度蜘蛛不友好,价格信息较难在搜索中应用。问题修正后,可用诊断工
你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception): '''A u
问题内容: 异常存储在哪里?堆,堆。如何为异常分配和释放内存?现在,如果您有多个需要处理的异常,是否创建了所有这些异常的对象? 问题答案: 我假设为异常分配的内存分配方式与所有其他对象(在堆上)分配方式相同。 这曾经是个问题,因为您不能为OutOfMemoryError分配内存,这就是直到Java 1.6之前 才没有堆栈跟踪的原因。现在,它们也为stacktrace预分配了空间。 如果您想知道在抛