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 看到负载巨高,集群中的机器 ...
随机推荐
- Java并发-volatile的原理及用法
Java并发-volatile的原理及用法 volatile属性:可见性.保证有序性.不保证原子性.一.volatile可见性 在Java的内存中所有的变量都存在主内存中,每个线程有单独CPU缓存内存 ...
- ES6 WeakMap和WeakSet的使用场景
JavaScript垃圾回收是一种内存管理技术.在这种技术中,不再被引用的对象会被自动删除,而与其相关的资源也会被一同回收. Map和Set中对象的引用都是强类型化的,并不会允许垃圾回收.这样一来,如 ...
- Hadoop(四)shell脚本定时采集日志数据到hdfs
#!/bin/bash #set java envexport JAVA_HOME=/wocloud/java/jdk1.7.0_45export JRE_HOME=${JAVA_HOME}/jree ...
- Linux 中的文件锁
参考资料: https://www.ibm.com/developerworks/cn/linux/l-cn-filelock/index.html
- UI设计教程分享:关于海报的合成过程
一张好的产品创意合成海报,能瞬间提升商品价值感,同时场景和相关元素的融入,让消费者瞬间明白商品属性及内涵.同时为商品营造的使用场景拥有更强的代入感,从而刺激转化.好的创意合成海报能为消费者带来视觉冲击 ...
- [Jmeter] 将参数从Jenkins传递给Jmeter
Configuration in Jmeter Configuration in Jenkins
- MySQL数据库innodb_rollback_on_timeout默认值的危害?
http://www.ywnds.com/?p=9560 一.innodb_rollback_on_timeout变量 有时侯会发生事务超时的情况,MySQL会返回类似这样的错误: 1 ERROR ...
- docker使用自定义镜像zabbix服务
一.关闭firewall,永久关闭,使用iptables防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firew ...
- tensorflow下识别手写数字基于MLP网络
# coding: utf-8 # In[1]: import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_da ...
- ATM自动取款机程序感想
上周四的Java考试,老师并没有我们考暑假给我们布置的样卷的java程序,而是让我们做一个设计ATM的程序,然而这个对于我们来说好难,因为暑假没有学好java,首先基础知识还没有掌握,输入数据一开始都 ...