高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

Java 诊断工具 Greys

目录
  1. 1. 使用Greys监控方法执行时间
    1. 1.1. Greys 安装

常见的Java诊断工具有几个:
Btrace (应该是元老级别)
https://github.com/btraceio/btrace
HouseMD (阿里系,好多年没更新了,将常用的几个Btrace脚本整合在一起形成一个独立风格的应用)
https://github.com/CSUG/HouseMD
Greys(阿里系,参考的HouseMD和Btrace的思路,做了很多优化)
https://github.com/oldmanpushcart/greys-anatomy
Arthas(阿里系,基于 Greys 进行二次开发的全新在线诊断工具)
https://github.com/alibaba/arthas

从上面可以看出来,目前最新最全面的是Arthas。公司使用的wildfly8.0版本的容器,Arthas无法attach到对应的java进程上,而Greys却可以(已提交issue)。这里只能退而求其次,使用Greys,实际上已经可以满足我个人对性能监控的要求了。


关于Greys的安装、使用,https://github.com/oldmanpushcart/greys-anatomy/wiki 上面已经讲的非常清楚了,这里只是针对我个人日常的工作环境和习惯来简单谈谈Greys的安装和使用。

使用Greys监控方法执行时间

日常做性能测试,最希望的是能够定位到各方法的执行时间,便于缩小性能问题的定位范围。Greys 提供了trace命令,能够统计整个调用链路上的所有性能开销和追踪调用链路。

Greys 安装

步骤一:配置JAVA环境变量
编辑 /etc/profile,添加JAVA配置

1
2
3
4
export JAVA_HOME=/opt/wildfly/openjdk/openjdk-1.8.0_92/
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

执行 source /etc/profile,使之配置生效。

步骤二:下载安装Greys
由于开发环境上不了外网,遂采用本地安装的方式。
下载最新版本安装包:http://ompc.oss.aliyuncs.com/greys/release/greys-stable-bin.zip

1
2
3
4
5
6
unzip greys-stable-bin.zip
cd cd greys
#切换到监控进程的用户权限
su - jbossuser
#执行本地安装脚本
./install-local.sh

安装成功会提示:install to local successed.

步骤三:启动Greys
找到JAVA进程的id
执行命令:./greys.sh pid

1
2
jps
./greys.sh 15166

Alt text

步骤四:执行trace
以日常工作中常用的rsf协议(公司自研的rpc协议)为例,研发人员会提供契约和方法名,只需要执行trace 契约 方法名

Alt text

可以看到执行时间较长的方法,继续trace下去
Alt text

继续trace,直到定位到问题。