在线上环境无法通过jprofile监控服务时,我们可以通过arthas来实现监控和使用:
使用
1、首先要在目标服务器上下载arthas包:
# 下载:
wget https://arthas.aliyun.com/arthas-boot.jar
# 启动:
java -jar arthas-boot.jar
2、随后arthas会打印出当前服务器上的java进程供我们选择,此时我们只需要选择1 回车即可进入到此进程的交互界面
3、输入交互式命令,这里提几个常用的交互式命令:
3.1、bashboard 命令
3.2、help命令
可以查看arthas所有命令
3.3、tab
通过tab可以补齐所有命令
3.4、thread命令
3.5、sc
当我们想看看包里是否有我们新加的class时可以使用此命令
3.6、jad
当我们想看看改的代码是否生效时,可以用jad反编译后对比
3.7、watch
这个命令最常用,可以用来查看一个函数调用情况
watch在排查函数的入参和输出以及变量十分好用,这里需要着重讲一下:
watch有观察表达式,默认是{params, target, returnObj},函数的入参、该类的成员变量、函数的返回值
这里我们举例说明一下:以pentagon项目为例
如上图片显示,我们发现得到的信息并不理想,这是因为我们默认打印的是第一层,这里就涉及到参数-x
[x:] 指定输出结果的属性遍历深度,默认为 1
此时我们将 -x 设置为2 看一下:明显发现打印的更多了,但参数中的数组内容依然没有全部打印
试一下-x 3:可以发现数组内容的参数也全部打印出来,十分方便
我们还可以通过 其他表达式来观察方法调用前和调用后
再举一个异常排查案例:可以通过 * 来监控一个类的所有函数
3.8、stop退出
只有stop才是真正退出
3.9、sysprop \ sysenv \ jvm
此外,arthas支持pipeline,即管道符
代码热更新案例
https://blog.csdn.net/qq_35128600/article/details/127772552?spm=1001.2014.3001.5501
docker中使用arthas
官网:https://arthas.aliyun.com/doc/docker.html
在docker中使用arthas有三种方式:
1、在dockerfile中就已经安装了arthas
2、通过docker exec -it ca4e68524d42 /bin/bash -c “wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar” 这种命令进入到容器中现安装
3、dockerfile里面的服务的jar包本身的maven依赖中就有arthas,直接就可以监控当前服务!
微服务中使用arthas
主要是通过maven将arthas依赖进工程中,这样在服务启动时就可以自动监控服务
官网:https://arthas.aliyun.com/doc/spring-boot-starter.html
Arthas Tunnel
官网:https://arthas.aliyun.com/doc/tunnel.html
arthas还支持多服务注册到arthas中心统一管理,采用B/S架构。
支持火焰图
官网:https://arthas.aliyun.com/doc/profiler.html