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 看到负载巨高,集群中的机器 ...
随机推荐
- Linux ulimit
一.简介 二.语法 三.其他 1)linux下进程的进程最大数.最大线程数.进程打开的文件数和ulimit命令修改硬件资源限制 http://blog.csdn.net/gatieme/art ...
- MAC/Xcode简单操作命令
快捷键: command(windows) + c: 复制 command + V : 粘贴 command + x: 剪切(只在当前应用程序内有效) 在mac系统下表示剪切功能: 先command ...
- [Robot Framework] 调用ExcelLibrary
安装ExcelLibrary for Robot Framework 参考 : http://navinet.github.io/robotframework-excellibrary/ 打开wind ...
- Intellij idea 系列教程目录
Intellij idea 系列教程目录 Intellij idea 系列教程之破解方法 Intellij idea 系列教程之常用快捷键 Intellij idea 系列教程之常用配置项 每天用心记 ...
- Netty 源码(二)NioEventLoop 之 Channel 注册
Netty 源码(二)NioEventLoop 之 Channel 注册 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一 ...
- Max Chunks To Make Sorted II LT768
This question is the same as "Max Chunks to Make Sorted" except the integers of the given ...
- GRADLE下运行main函数/执行测试用例
group 'gongsibao.ged' version '1.0-SNAPSHOT' apply plugin: 'java' apply plugin: 'idea' sourceCompati ...
- 前端js数据排序
销量统计系统中国地图热力分布图需要显示一个各省区销量列表,并按从多到少排序.本着轻易不修改后台数据源的原则,决定在前端进行修改实现.其实也容易实现,将数据存放一个数据<省区名称,销量>,然 ...
- 一台老服务器的升级日志(PHP4.4.9+MySQL5.1)升级MySQL5.6
1.备份数据库 mysqldump -uroot -p --all-databases > databases.sql 2.停止mysql服务 service mysqld stop 3.卸载旧 ...
- python中从内部循环直接跳出多层循环
学习循环的时候碰到一道题,需要从内部循环中直接跳出所有循环,想了很久终于想到一种好办法(小白认知) 题目为:使用while循环输出100-50,从大到小,到50时,再循环输出0-50,从小到大. ex ...