- arthas相关地址:https://www.yuque.com/arthas-idea-plugin
- wathch(其他类似)的2个重要ognl表达式
wathch com.xxx.Yyy {1} -v -x 3 -n 3 {2}
- {1}:观察表达式,控制打印成什么样子
- {2}:条件表达式,控制{1}是否打印
- {1}处,如果是列表,那么可以进行投影操作,如: "params[0].{#this.id}";
- {1}处的作用,有时候参数嵌套太深,即使
-x 4
都不一定能看到具体值,那么这时候就有必要使用ognl表达式处理下参数,让参数层数少点
- ognl表达式如果是list,那么获取属性(投影)需要用花括号,如:
params[0].{#this.id}
,并且可以级联操作 params[0].{#this.id}.{#this}
,只要不是最后一步,似乎不要#this
也行
- ognl表达式如果不是list,那么获取属性不需要花括号,如:
params[0].userName
- 对于偶发性的bug,可以使用watch+异步任务,如:
watch *DeveloperController process "params[0].{#this.id}" -v -x 3 > /Users/wangdehai/logs/arthas/aa.log &
, 后台执行,一天只出现一次问题排查
- Arthas的一些特殊用法文档说明
- 关于ognl表达式,随便找两个帖子看一下就明白了
- 关于tennel配置如下:
# 指定arthas.app-name会自动生成arthas.agent-id为${arthas.app-name}_xxxx,无需手动指定arthas.agent-id(当然也可以指定为类似:${spring.application.name}_${random.uuid}这种)
arthas.app-name = ${spring.application.name}
server.port=8081
arthas.http-port = -1
# arthas.telnet-port如果设置成了-1,那么就是随机端口,telnet localhost 3658就失效了
arthas.telnet-port = -1
# 要使用tunnel功能,那么arthas.tunnel-server必须要填写
arthas.tunnel-server = ws://localhost:7777/ws
- 启动服务:java -jar arthas-tunnel-server-3.7.2-fatjar.jar --arthas.enableDetailPages=true
- tunnel的app列表地址:
localhost:8080/apps.html
- 关于tunnel有没有必要,如果服务每个节点只有1个,并且能够进入到容器,那么直接telnet进入操作即可,如果服务节点比较多,或者无法进入到容器,那么就有必要使用