1.安装
wget http://ompc.oss.aliyuncs.com/greys/release/greys-stable-bin.zip
unzip greys-stable-bin.zip
cd greys
./install-local.sh
2.运行
[work@izj5e75deja8zjdqvp9xfnz greys]$ ./greys.sh 16248
_
____ ____ _____ _ _ ___ _____ _____ ____ _____ _| |_ ___ ____ _ _
/ _ |/ ___) ___ | | | |/___|_____|____ | _ \(____ (_ _) _ \| \| | | |
( (_| | | | ____| |_| |___ | / ___ | | | / ___ | | || |_| | | | | |_| |
\___ |_| |_____)\__ (___/ \_____|_| |_\_____| \__)___/|_|_|_|\__ |
(_____| (____/ (____/
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|v|e|r|s|i|o|n|:|1|.|7|.|6|.|6|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ga?>
ga?>
16248 为要监控的进程id
监控某方法的参数
watch -f org.mybatis.spring.SqlSessionTemplate insert params[0] -x 1
- -b 表示方法调用之前
- -e 表示方法抛出异常之后
- -s 表示方法返回之后
- -f 方法结束之后(正常返回和异常返回)
- params[0]表示第1个入参,params[x]表示第x+1个入参。
- -x 1表示展开第一个层级(和调用toString()打印对象类似),比如展开对象的属性,如果属性里面还有对象,就需要展开2级层级(-x 2)
trace org.apache.http.impl.conn.PoolingHttpClientConnectionManager closeIdleConnections 2
PoolingHttpClientConnectionManager类执行closeIdleConnections方法时,打印两次
ptrace com.fintell.dp3.api.filter.GlobalFilter * --path=com.fintell.dp3.* --path=com.fintell.tools.* --path=org.apache.http.impl.client.CloseableHttpClient --path=org.redisson.RedissonBucket --path=com.alibaba.fastjson.JSONPath --path=com.alibaba.fastjson.JSONObject 10
通过ptrace追踪GlobalFilter的全部方法的执行耗时,并且统计 --path后面指定包或类中调用到的方法的耗时;一共抓取10次
shutdown
还原字节码并断开连接;
ptrace com.fintell.dp3.api.filter.GlobalFilter * --path=com.fintell.*
使用注意事项:
1.不能大范围的变更字节码,应当将要监控的类和方法限制在一个小的范围内,因为改写太多的类的字节码,会导致变更字节码的时间非常长,从而导致服务器暂停很长一段时间;
2. 不能无限制的监控,因为监控数据是放在jvm内存中的,如果一直采集,会导致你的内存爆掉,所以一定要指定采集次数;
3. 退出时要还原字节码;
4. 启动greys的用户,要和启动jvm的用户一致,否则greys连接不上jvm