最近偶尔有用户反馈某些 HTTP 接口出现超时问题,而 web 服务端的 Trace 监控没有出现 http 返回值为 503 等异常情况。出现这种情况一般是web容器出现问题,客户端连
Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。
Github:https://github.com/alibaba/arthas
文档:https://alibaba.github.io/arthas
Arthas 3.1.2版本持续增加新特性,下面重点介绍:
- logger/heapdump/vmoption/stop命令
- 通过tunnel server连接不同网络的arthas,方便统一管控
- 易用性持续提升:提示符修改为arthas@pid形式,支持ctrl + k清屏快捷键
logger/heapdump/vmoption/stop命令
logger命令
查看logger信息,更新logger level
https://alibaba.github.io/arthas/logger.html
查看所有logger信息
以下面的 logback.xml 为例:
使用 logger 命令打印的结果是:
从appenders的信息里,可以看到
- CONSOLE logger的target是System.out
- APPLICATION logger是RollingFileAppender,它的file是app.log
- ASYNC它的appenderRef是APPLICATION,即异步输出到文件里
查看指定名字的logger信息
更新logger level
heapdump命令
dump java heap, 类似jmap命令的heap dump功能。
dump到指定文件
只dump live对象
vmoption命令
查看,更新VM诊断相关的参数
查看所有的option
查看指定的option
更新指定的option
stop命令
之前有用户吐槽,不小心退出Arthas console之后,shutdown会关闭系统,因此增加了stop命令来退出arthas,功能和shutdown命令一致。
通过tunnel server连接不同网络的arthas
在新版本里,增加了arthas tunnel server的功能,用户可以通过tunnel server很方便连接不同网络里的arthas agent,适合做统一管控。
启动arthas时连接到tunnel server
在启动arthas,可以传递--tunnel-server参数,比如:
目前47.75.156.201是一个测试服务器,用户可以自己搭建arthas tunnel server
如果有特殊需求,可以通过--agent-id参数里指定agentId。默认情况下,会生成随机ID。
attach成功之后,会打印出agentId,比如:
如果是启动时没有连接到 tunnel server,也可以在后续自动重连成功之后,通过 session命令来获取 agentId:
以上面的为例,在浏览器里访问 http://47.75.156.201:8080/ ,输入 agentId,就可以连接到本机上的arthas了。
Arthas tunnel server的工作原理
https://github.com/alibaba/arthas/blob/master/tunnel-server/README.md
易用性持续提升
提示符修改为arthas@pid形式,用户可以确定当前进程ID,避免多个进程时误操作
增加ctrl + k清屏快捷键
总结
总之,3.1.2版本的Arthas新增加了logger/heapdump/vmoption/stop命令,增加了tunnel server,方便统一管控。另外还有一些bug修复等,可以参考
Release Note
最后,Arthas的在线教程考虑重新组织,欢迎大家参与,提出建议,详情参考这里。
本文作者:中间件小哥
本文为云栖社区原创内容,未经允许不得转载。