greys-anatomy是 个好东西!greys-anatomy是 个好东西!greys-anatomy是 个好东西!

greys-anatomy是什么自己看吧(不支持windows环境操作),原文网址:https://github.com/oldmanpushcart/greys-anatomy

场景:hello world上线后,由于种种可能 ,执行某个方法时,很久。。。这时在生产环境中排查是哪个方法或SQL导致时间过长,就不好办了。(可以考虑把正式的数据库网址放到本地程序去跑一跑)想查出来哪个方法耗时比较多,要做相关优化,greys-anatomy可以帮我们做得到。

模拟代码:

假设发出一个请求:xx/one/One,调用相关方法:

greys-anatomy之查询耗时过长方法

doGet方法调用Test.hello() -- > 查看hello方法内容:

greys-anatomy之查询耗时过长方法

再查看TestDao里的方法:

greys-anatomy之查询耗时过长方法

看到了TestDao用了线程模拟了查询时间慢。

把项目丢到tomcat上跑。。。启动tomcat,并用 ps -ef|grep tomcat 命令获取tomcat的pid:

greys-anatomy之查询耗时过长方法

进入gresy,执行命令:  ./greys.sh 3458(3458是tomcat的PID):

greys-anatomy之查询耗时过长方法

开始查看方法的耗时:执行:ptrace -t -n 3 One doGet --path=cn* 

-t :记录下渲染路径上所有方法的入参与返回值,记录下的返回值可以与tt命令联动

-n 3: 查看次数3次

One:这个是类名

doGet:One类下的doGet方法

--path:要查看个路径下(包下)的类的方法执行时间,cn*也就是cn包下所有方法的执行时间,也可以指定具体的包下,如cn.test

具体查看:https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf#ptrace命令

效果图:

greys-anatomy之查询耗时过长方法

如上图所示,很明显就可以查出哪个方法执行耗时较多了,可以改代码了。

 

相关文章: