首页   快速返回

jvm在线诊断工具greys     所属分类 java
可跟踪指定方法堆栈及耗时 性能优化时很有用

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模块介绍