有时候忽然一个问题反馈上来,须要入参才能完成定位,但偏偏没有任何日志。回去加上从新部署,一杯咖啡时间过去了,是否是很崩溃?git
当你通过反复这样几回折腾以后变得聪明了,在本身的代码的全部入参和出参地方都加上debug日志,但此次问题彷佛暴露在别人的代码中了...是否是很无奈?github
忽然遇到线上一个性能问题没法肯定究竟是哪一个环节的耗时,只能反复抓jstack猜,还有没有办法能够好好的过日子啦?api
遇到以上问题时,你就是咱们这类工具的目标客户,此类工具能利用Java6的Instrumentation特性,动态加强你所指定的类,获取你想要到的信息session
查看已被JVM所加载的类、方法信息curl
方法执行监控jvm
调用量,成功失败率,响应时间工具
方法执行数据操做性能
入参、返回值、异常信息记录与查看;支持动做回放ui
性能开销渲染!atom
跟踪指定路径中的方法调用轨迹、耗时
查看方法调用堆栈
在线安装(推荐)
curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|sh
解压zip文件后,执行如下命令
cd greys sh ./install-local.sh
目标机器启动
./ga.sh <PID>
./greys.sh <PID>[@IP:PORT]
若是不指定IP和PORT,默认是127.0.0.1和3658
命令 | 说明 |
---|---|
help | 查看命令的帮助文档,每一个命令和参数都有很详细的说明 |
sc | 查看JVM已加载的类信息 |
sm | 查看已加载的方法信息 |
monitor | 方法执行监控 |
trace | 渲染方法内部调用路径,并输出方法路径上的每一个节点上耗时 |
ptrace | 强化版的trace命令。经过指定渲染路径,并可记录下路径中全部方法的入参、返值;与tt命令联动。 |
watch | 方法执行数据观测 |
tt | 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不一样的时间下调用进行观测 |
stack | 输出当前方法被调用的调用路径 |
version | 输出当前目标Java进程所加载的Greys版本号 |
quit | 退出greys客户端 |
shutdown | 关闭greys服务端 |
reset | 重置加强类,将被greys加强过的类所有还原 |
session | 查看当前会话 |
jvm | 查看当前JVM的信息 |
sc命令
sc -df *.impl.ApplyImpl
查看PreLoanImpl类信息
sm命令
sm -d .impl.ApplyImpl
查看ApplyImpl全部方法信息
monitor命令
monitor -c 20 *impl.PostLoanImpl monitorAdd
统计周期为20s,统计PostLoanImpl类的monitorAdd方法状况
trace命令
trace cn.fraudmetrix.creditcloud.api.impl.PostLoanImpl monitorAdd
跟踪PostLoanImpl的monitorAdd方法调用stack并统计调用时间开销
ptrace命令
ptrace -t cn.fraudmetrix.creditcloud.api.impl.PostLoanImpl monitorAdd
跟踪PostLoanImpl的monitorAdd方法调用stack中含路径名为fraudmetrix并统计调用时间开销
watch命令
watch -bs *.impl.PostLoanImpl monitorAdd 'params[0] + "\t" + params[1]+ "\t" + returnObj'
查看PostLoanImpl的monitorAdd方法的入参、返回值信息
watch -b *.impl.PostLoanImpl monitorAdd 'params[0]' -x 1
查看PostLoanImpl的monitorAdd方法的第一个入参信息,并展开一层显示
tt命令
tt -t -n 3 *PostLoanImpl monitorAdd
记录3次PostLoanImpl类的monitorAdd方法的执行状况。