Greys--JVM异常诊断工具
https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf
一、简介
我们平时在线上或者开发中会遇到各种性能、功能等问题,在运行过程中需要查看方法入参、返回值,或者方法执行的堆栈时间,或者jar冲突时类加载来自那个jar包等问题。我们在开发过程中,可能会打印log日志、手动去打印入参、返回值等,或者自己实现简单的profile方法,代码侵入性大且效率较低;另外我们可以使用类似btrace工具去跟踪,这需要自己去实现btrace脚本,服务端需要启动agent,也有点小麻烦。后来淘宝聚石用scala写了个houseMD,但只支持到jdk1.6,后续也没有更新了;后面又有淘宝同学借鉴了btrace和houseMD,写了Greys,方便定位常见的java问题,下面简单介绍其使用方法。
下载地址:http://ompc.oss.aliyuncs.com/greys/release/greys-1.7.6.4-bin.zip
二、安装
a. 解压greys-1.7.6.4-bin.zip,目录结构如下
-rwxr-xr-x. 1 admin admin 1047 11月 7 11:54 ga.sh
-rw-r--r--. 1 admin admin 10595 11月 7 11:54 greys-agent.jar
-rw-r--r--. 1 admin admin 3472230 11月 7 11:54 greys-core.jar
-rwxr-xr-x. 1 admin admin 7972 11月 7 11:54 greys.sh
-rwxr-xr-x. 1 admin admin 2927 11月 7 11:54 gs.sh
-rwxr-xr-x. 1 admin admin 683 11月 7 11:54 install-local.sh
b. 安装
cd greys
sh ./install-local.sh
三、待监控应用启动agent
pid为应用进程号
./ga.sh pid
三、应用监控控制客户端
pid 为应用进程号, ip为应用所在机器, 3658为agent默认端口号
./greys.sh pid@ip:3658
或者远程访问
./gs.sh ip
四、Greys命令详解
| 命令 | 说明 |
|---|---|
| help | 查看命令的帮助文档,每个命令和参数都有很详细的说明 |
| sc | 查看JVM已加载的类信息 |
| sm | 查看已加载的方法信息 |
| monitor | 方法执行监控 |
| trace | 渲染方法内部调用路径,并输出方法路径上的每个节点上耗时 |
| ptrace | 强化版的trace命令。通过指定渲染路径,并可记录下路径中所有方法的入参、返值;与tt命令联动 |
| watch | 方法执行数据观测 |
| tt | 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 |
| stack | 输出当前方法被调用的调用路径 |
| js | 支持使用JavaScript脚本;支持CommonJS部分规范模块化(BMD规范) |
| version | 输出当前目标Java进程所加载的Greys版本号 |
| quit | 退出greys客户端 |
| shutdown | 关闭greys服务端 |
| rest | 重置增强类,将被greys增强过的类全部还原 |
| session | 查看当前会话 |
| jvm | 查看当前JVM的信息 |
示列:
tt -t -n 100 *UserServiceImpl queryById
+----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
| INDEX | PROCESS-ID | TIMESTAMP | COST(ms) | IS-RET | IS-EXP | OBJECT | CLASS | METHOD |
+----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
| 1001 | 1001 | 2017-03-08 15:39:11 | 10 | true | false | 0x7204ebf1 | UserServiceImpl | queryById |
+----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
| 1002 | 1002 | 2017-03-08 15:39:12 | 6 | true | false | 0x7204ebf1 | UserServiceImpl | queryById |
+----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
| 1003 | 1003 | 2017-03-08 15:39:12 | 5 | true | false | 0x7204ebf1 | UserServiceImpl | queryById |
+----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
| 1004 | 1004 | 2017-03-08 15:39:13 | 6 | true | false | 0x7204ebf1 | UserServiceImpl | queryById |
+----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
| 1005 | 1005 | 2017-03-08 15:39:48 | 6 | true | false | 0x7204ebf1 | UserServiceImpl | queryById |
+----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
| 1006 | 1006 | 2017-03-08 15:39:48 | 5 | true | false | 0x7204ebf1 | UserServiceImpl | queryById |
+----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
| 1007 | 1007 | 2017-03-08 15:39:49 | 4 | true | false | 0x7204ebf1 | UserServiceImpl | queryById |
+----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
| 1008 | 1008 | 2017-03-08 15:39:49 | 5 | true | false | 0x7204ebf1 | UserServiceImpl | queryById |
具体使用详见:https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf
Greys--JVM异常诊断工具的更多相关文章
- Greys Java在线问题诊断工具
摘要: 线上系统为何经常出错?数据库为何屡遭黑手?业务调用为何频频失败?连环异常堆栈案,究竟是那次调用所为? 数百台服务器意外雪崩背后又隐藏着什么?是软件的扭曲还是硬件的沦丧? 走进科学带你了解Gre ...
- <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- <JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- (转)权威支持: 选择正确的 WebSphere 诊断工具
权威支持: 选择正确的 WebSphere 诊断工具 原文:https://www.ibm.com/developerworks/cn/websphere/techjournal/0807_supau ...
- Java诊断工具Arthas
Java诊断工具Arthas 1. Arthas简介 Arthas是阿里开源的一个线上java诊断工具,发现阿里还是挺喜欢开源一些技术的,造福人类.昨天试用了一下,发现真是强大,解决了我工作两年的很多 ...
- Arthas在线java进程诊断工具 在线调试神器
tag: java 诊断 堆栈 在线调试 耗时 死锁 arthas 阿里巴巴 Arthas (阿尔萨斯) Arthas 是 Alibaba 开源的Java诊断工具,深受开发者喜爱. 官网文档:http ...
- 干货分享!JAVA诊断工具Arthas在Rainbond上实践~
别再担心线上 Java 业务出问题怎么办了,Arthas 帮助你解决以下常见问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 ...
- java jvm常用命令工具
[尊重原创文章出自:http://www.chepoo.com/java-jvm-command-tools.html] 一.概述 程序运行中经常会遇到各种问题,定位问题时通常需要综合各种信息,如系统 ...
- [转]linux 系统监控、诊断工具之 IO wait
1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器 ...
随机推荐
- Varnish 入门
本文将介绍 varnish 的工作流程,安装以及 varnish 的配置三个方面的内容.首先简单的介绍 varnish 以及其工作流程,大概了解其内部原理,然后介绍了 varnish 的安装方法,最后 ...
- dev accordionControl panelcontorl 使用
对于dev的窗体布局我想更系统的专业的学学,不是评自己以往 的经验去做, 所以我看了dev的demo 里边的例子,封装的很严实,还有他们自己重新做的控件,无法直接使用, 关键的控件也上了锁,可能也是保 ...
- iOS.Notification.Bar.Color
Reference: http://apple.stackexchange.com/questions/44246/what-determines-the-special-color-of-the-s ...
- javascript 高级程序设计 四
新的一天开始,让我们伴随者轻快的心情,开始今天的笔记 1.操作符: (1): *./.-在ECMAScript中操作的时候,如果遇到有一个操作值不是数值型(Number),那么就会在后台调用numbe ...
- 使用limma、Glimma和edgeR,RNA-seq数据分析易如反掌
使用limma.Glimma和edgeR,RNA-seq数据分析易如反掌 Charity Law1, Monther Alhamdoosh2, Shian Su3, Xueyi Dong3, Luyi ...
- zz Alex's BLOG 串口连接
using System; using System.Collections.Generic;using System.ComponentModel;using System.Data;using S ...
- Python之路(第二十六篇) 面向对象进阶:内置方法
一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__g ...
- Python之路(第十一篇)装饰器
一.什么是装饰器? 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1 ...
- [Python]Python章1 Python中_的故事
_xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. 本文为译文,版 ...
- merge_节点
(1)CREATE可以创建相同节点,merge若节点已存在,则不会重新添加. CREATE (gp1:GoogleProfile1 {Id: 201401, Name:"Apple" ...