arthas使用

118 阅读3分钟

阿里as(arthas)

注:本文档中的所有操作基于centos7,测试项目为jsherp(开源项目),全程开始jmeter压测erp登录接口

下载

cd /opt
wget https://alibaba.github.io/arthas/arthas-boot.jar
​

启动

cd /opt
java -jar arthas-boot.jar (执行此命令启动as程序)
执行后,as会自动找到本机的java进程,如下图日志中找到的进程号为2117,即java项目的进程号
按1回车 即选择监控项目,并进入as程序命令行模式

image-20211215165615322

基础使用

1、dashboard

展示当前进程信息。概况大盘,对性能测试用处不大。

2、thread线程

thread -h -----查看命令的帮助

thread -----打印所有线程信息

image-20211215171218320

thread 30 -----打印某个线程运行情况,其中jsh是我的测试项目

image-20211215171529739

thread -b ----查看死锁线程

thread -i 2000 -----查看2s内的cpu的线程

thread -n 4 -----查看cpu占用最高的4个线程,数字可以自己修改

3、jad反编译

jad com.jsh.erp.service.user.UserService

image-20211215172656695

此命令执行后,能显式详细的java源代码

4、watch函数执行数据观测

watch com.jsh.erp.service.user.UserService getRoleTypeByUserId returnObj ---查看getRoleTypeByUserId调用的返回值

watch com.jsh.erp.service.user.UserService getRoleTypeByUserId '{params, returnObj}' '#cost>50'

----查看getRoleTypeByUserId的参数和返回值,并且按照执行耗时过滤。

5、quit或者exit命令退出

高阶使用

1、monitor 方法执行监控

monitor -c 5 com.jsh.erp.service.user.UserService getRoleTypeByUserId

每5秒输出一次监控结果(时间戳,类,方法,总调用次数,成功次数,失败次数,平均响应时间,失败率)。

image-20211216102100199

2、trace 方法内部调用路径,并输出方法路径上的每个节点上的耗时
2.1 跟踪com.jsh.erp.service.user.UserService类的方法getRoleTypeByUserId

trace com.jsh.erp.service.user.UserService getRoleTypeByUserId

image-20211216102920526

如上:

1:表示调用getRoleTypeByUserId()方法,耗时6.7497ms

2:表示在getRoleTypeByUserId方法中调用了com.jsh.erp.service.userBusiness.UserBusinessService类的getBasicData()方法,耗时3.06399ms。源码的705行

3:表示在getRoleTypeByUserId方法中调用了com.jsh.erp.datasource.entities.UserBusiness类的getValue()方法,耗时0.013567ms。源码的709行。

4:表示getRoleTypeByUserId方法中调用了com.jsh.erp.service.role.RoleService类的getRole()方法,耗时3.336055ms。源码的718行。

2.2 据调用耗时过滤

trace com.jsh.erp.service.user.UserService getRoleTypeByUserId '#cost > 10'

只会展示耗时大于10ms的调用路径,有助于在排查问题的时候,只关注异常情况

2.3 trace多个类或者多个函数

不建议使用,不方便监控

trace -E com.jsh.erp.service.user.UserService|com.jsh.erp.datasource.entities.UserBusiness getValue|getKeyId
3、stack 输出当前方法被调用的路径

基本使用

stack com.jsh.erp.service.user.UserService getRoleTypeByUserId

据执行时间来过滤

stack com.jsh.erp.service.user.UserService getRoleTypeByUserId '#cost > 5'

4、web console

启动命令

java -jar arthas-boot.jar --target-ip 192.168.9.47

注意:target-ip是arthas部署的机器ip,默认监控127.0.0.1

浏览器访问:http://192.168.9.47:8563/

此时浏览器上能执行as提供的各种监控命令

通用命令格式: command [arg] class method [arg]