watch命令使用

1,使用watch命令让你方便的观察到指定方法的调用情况,能观察
到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看

命令:watch 类reference 方法名称 “{params,returnObj,throwExp}” -x 遍历深度 -n 收集次数

1
watch com.test.UserService query "{params,returnObj,throwExp}" -x 3 -n 3

2,把观测数据记录到文件中

命令:监测命令 > 日志路径 &

1
watch com.test.UserService query "{params,returnObj,throwExp}" -x 3 -n 10 > /tmp/arthas/watch.log &

3,增加耗时条件,cost>200(单位是ms)表示只有当耗时大于200ms时才会输出

1
watch com.test.UserService query "{params,returnObj,throwExp}" -x 3 -n 3 "#cost>200"

4,发生异常才观测,使用-e表示抛出异常时才触发收集,如下:

1
watch com.test.UserService query "{params,returnObj,throwExp}" -x 3 -n 3 -e

5,如果想查看方法运行前后,当前对象中的属性,可以使用target关键字,代表当前对象,也可以使用target.field_name访问当前对象的某个属性

1
watch com.test.UserService query -n 3 "target"

tt命令使用

1,使用tt命令记录下方法的每次调用环境现场,次数=20:

1
tt -t -n 20 com.test.UserService query

2,使用tt -l可以查看记录的列表:

1
tt -l

3,使用tt -i index查看调用信息:

1
tt -i [替换为INDEX]

4,使用tt -i index -p重新发起一次请求:

1
tt -i [替换为INDEX] -p

5,tt跟踪的记录,如果需要清除,可以直接shutdown退出arthas命令

shell快速操作脚本生成

脚本名称:arthas.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
#author: chenguolin
p1="$1"

if [ "$1" = "" ];then
echo "请传入:方法Reference!如:sh arthas.sh com.test.UserService#query"
exit 1
fi

echo "----------------------start--------------------------"
echo ""
echo "#####################生成方法监测命令tt和watch##################"
echo ""
echo '1,使用watch命令观察到方法的参数、返回和异常情况,深度=3、次数=3:'
echo 'watch '${p1%#*}' '${p1##*#}' "{params,returnObj,throwExp}" -x 3 -n 3'
echo ""
echo '2,将观察记录到本地文件中:'
echo 'watch '${p1%#*}' '${p1##*#}' "{params,returnObj,throwExp}" -x 3 -n 10 > /tmp/arthas/watch.log &'
echo ""
echo '3,只观察异常的请求:'
echo 'watch '${p1%#*}' '${p1##*#}' "{params,returnObj,throwExp}" -x 3 -n 3 -e'
echo ""
echo '4,只观察大于200毫秒的请求:'
echo 'watch '${p1%#*}' '${p1##*#}' "{params,returnObj,throwExp}" -x 3 -n 3 "#cost>200"'
echo ""
echo '5,观察请求方法对象,使用类似target.user形式的命令查看对象:'
echo 'watch '${p1%#*}' '${p1##*#}' -n 3 "target"'
echo ""
echo '6,使用tt命令记录下方法的每次调用环境现场,次数=20:'
echo 'tt -t -n 20 '${p1%#*}' '${p1##*#}
echo ""
echo '7,使用tt -l可以查看记录的列表:'
echo 'tt -l'
echo ""
echo '8,使用tt -i index查看调用信息:'
echo 'tt -i [替换为INDEX]'
echo ""
echo '9,使用tt -i index -p重新发起一次请求:'
echo 'tt -i [替换为INDEX] -p'
echo ""
echo '10,使用tt -i index -w 'target'查看对象信息,也使用类似target.user形式的命令查看对象:'
echo "tt -i [替换为INDEX] -w 'target'"
echo ""
echo "----------------------end----------------------------"
echo ""


使用示例:

1
sh arthas.sh com.test.UserService#query

生成脚本示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
----------------------start--------------------------

#####################生成方法监测命令tt和watch##################

1,使用watch命令观察到方法的参数、返回和异常情况,深度=3、次数=3:
watch com.test.UserService query "{params,returnObj,throwExp}" -x 3 -n 3

2,将观察记录到本地文件中:
watch com.test.UserService query "{params,returnObj,throwExp}" -x 3 -n 10 > /tmp/arthas/watch.log &

3,只观察异常的请求:
watch com.test.UserService query "{params,returnObj,throwExp}" -x 3 -n 3 -e

4,只观察大于200毫秒的请求:
watch com.test.UserService query "{params,returnObj,throwExp}" -x 3 -n 3 "#cost>200"

5,观察请求方法对象,使用类似target.user形式的命令查看对象:
watch com.test.UserService query -n 3 "target"

6,使用tt命令记录下方法的每次调用环境现场,次数=20:
tt -t -n 20 com.test.UserService query

7,使用tt -l可以查看记录的列表:
tt -l

8,使用tt -i index查看调用信息:
tt -i [替换为INDEX]

9,使用tt -i index -p重新发起一次请求:
tt -i [替换为INDEX] -p

10,使用tt -i index -w target查看对象信息,也使用类似target.user形式的命令查看对象:
tt -i [替换为INDEX] -w 'target'

----------------------end----------------------------