阿里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程序命令行模式
基础使用
1、dashboard
展示当前进程信息。概况大盘,对性能测试用处不大。
2、thread线程
thread -h -----查看命令的帮助
thread -----打印所有线程信息
thread 30 -----打印某个线程运行情况,其中jsh是我的测试项目
thread -b ----查看死锁线程
thread -i 2000 -----查看2s内的cpu的线程
thread -n 4 -----查看cpu占用最高的4个线程,数字可以自己修改
3、jad反编译
jad com.jsh.erp.service.user.UserService
此命令执行后,能显式详细的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秒输出一次监控结果(时间戳,类,方法,总调用次数,成功次数,失败次数,平均响应时间,失败率)。
2、trace 方法内部调用路径,并输出方法路径上的每个节点上的耗时
2.1 跟踪com.jsh.erp.service.user.UserService类的方法getRoleTypeByUserId
trace com.jsh.erp.service.user.UserService getRoleTypeByUserId
如上:
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]