jvm在线诊断工具greys
所属分类 java
浏览量 1349
可跟踪指定方法堆栈及耗时 性能优化时很有用
Greys-Anatomy取名同名美剧“实习医生格蕾”
同类工具
BTrace 脚本编写学习成本很高,且容易出错。容易搞挂系统
2012年淘宝的聚石写了HouseMD,将常用的几个Btrace脚本整合在一起形成一个独立风格的应用,但其核心代码用的是Scala
HouseMD相比BTrace最强大的地方就在于能快速指定拦截的类与方法,但却无法支持对观察到的对象进行展开、条件过滤等操作。
远程DEBUG最大的问题就在于,只允许一个人访问DEBUG端口,而且一单断点条件设置不当,很有可能将其他正常的业务请求拦下,影响其他用户的使用。
Greys采用的思路是做观察者,其所设置的断点不会阻塞正常业务的流程,但可以观察到断点所拦截到的所有信息。
Greys
目标类与Greys ClassLoader隔离
高性能 ASM 字节码增强
纯Java编写 专业的JVM的业务问题定位工具
在线安装(推荐)
curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|sh
./greys.sh $JVMPID [@IP:PORT]
IP和PORT,默认127.0.0.1和3658
help Display Greys Help
session Display current session information
version Display Greys version
jvm Display the target JVM information
top Display The Threads Of Top CPU TIME
sc Search all the classes loaded by JVM
sm Search the method of classes loaded by JVM
monitor Monitor the execution of specified Class and its method
watch Display the details of specified class and method
tt Time Tunnel
stack Display the stack trace of specified class and method
ptrace Display the detailed thread path stack of specified class and method
trace Display the detailed thread stack of specified class and method
reset Reset all the enhanced classes
asm Display class bytecode by asm format
shutdown Shut down Greys server and exit the console
quit Quit Greys console
js Enhanced JavaScript
sc -df com.dyyx.dbview.JdbcUtils
class-loader
能显示class全路径就更好了
sm -d com.dyyx.dbview.JdbcUtils *
显示方法信息
| com.dyyx.dbview.JdbcUtils | declaring-class : class com.dyyx.dbview.JdbcUtils |
| | gaMethod-name : query |
| | modifier : public,static |
| | annotation : |
| | parameters : java.lang.String |
| | java.lang.String |
| | java.lang.String |
| | int |
| | return : com.dyyx.dbview.dto.Result |
| | exceptions : java.lang.Exception
monitor -c 20 com.dyyx.dbview.JdbcUtils query
统计周期20s,统计方法情况
20秒之后出统计结果
trace com.dyyx.dbview.WebUtils conntest
跟踪方法调用堆栈并统计耗时
`---+Tracing for : thread_name="http-bio-8580-exec-3" thread_id=0x11;is_daemon=true;priority=5;
`---+[1121,1121ms]com.dyyx.dbview.WebUtils:conntest()
+---[1,0ms]com.dyyx.dbview.Utils:getString(@53)
+---[1,0ms]com.dyyx.dbview.Utils:blank(@54)
+---[1,0ms]java.lang.String:trim(@58)
+---[1,0ms]com.dyyx.dbview.Utils:getDBConfigMap(@60)
+---[1115,1114ms]com.dyyx.dbview.Utils:getConn(@64)
+---[1121,6ms]java.sql.Connection:getTransactionIsolation(@65)
+---[1121,0ms]com.dyyx.dbview.JdbcUtils:getTransactionIsolation(@66)
+---[1121,0ms]java.lang.StringBuilder:(@67)
+---[1121,0ms]java.lang.StringBuilder:append(@67)
+---[1121,0ms]java.lang.StringBuilder:append(@67)
+---[1121,0ms]java.sql.Connection:getAutoCommit(@67)
+---[1121,0ms]java.lang.StringBuilder:append(@67)
+---[1121,0ms]java.lang.StringBuilder:toString(@67)
`---[1121,0ms]com.dyyx.dbview.JdbcUtils:close(@72)
tt -t -n 3 com.dyyx.dbview.WebUtils conntest
记录3次方法执行情况。
watch -bs com.dyyx.dbview.JdbcUtils query 'params[1] + "," + params[2]+ "," + params[3] + "," +returnObj'
查看方法的入参、返回值信息
参数下标从0开始
jvm
查看 jvm 信息
jvm启动参数 CLASS-PATH BOOT-CLASS-PATH
类加载信息 加载数 卸载数
GC信息 次数 耗时
PS Scavenge : 44/744(ms)
PS MarkSweep : 1/59(ms)
[count/time]
内存池信息 堆内堆外内存
+--------------------+----------------------------------------------------------------------------------------------------+
| MEMORY-MANAGERS | CodeCacheManager : Code Cache |
| | Metaspace Manager : Metaspace |
| | Compressed Class Space |
| | PS Scavenge : PS Eden Space |
| | PS Survivor Space |
| | PS MarkSweep : PS Eden Space |
| | PS Survivor Space |
| | PS Old Gen |
+--------------------+----------------------------------------------------------------------------------------------------+
| MEMORY | HEAP-MEMORY-USAGE : 229113856/134217728/1908932608/154049384 |
| | [committed/init/max/used] |
| | NO-HEAP-MEMORY-USAGE : 53575680/2555904/-1/45384880 |
| | [committed/init/max/used] |
| | PENDING-FINALIZE-COUNT : 0
线程信息
COUNT : 26
DAEMON-COUNT : 25
LIVE-COUNT : 29
STARTED-COUNT : 4904
上一篇
下一篇
spring5事件机制
红黑树要点整理
BeanFactory和ApplicationContext的区别
.profile 与 .bash_profile
spring5配置属性读取机制
spring5模块介绍