Arthas - Alibaba 开源 Java 诊断工具 线上问题定位处理的终极利器
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
前言
在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。最终焦头烂额,还不一定能查出问题所在。而现在,大多数的常见问题你都可以使用 Arthas 轻松定位,迅速解决,及时止损,准时下班。
1、Arthas 介绍
Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,提供 Tab 自动不全,可以方便的定位和诊断线上程序运行问题。
Arthas 官方文档十分详细,本文也参考了官方文档内容,同时在开源在的 Github 的项目里的 Issues 里不仅有问题反馈,更有大量的使用案例,也可以进行学习参考。
开源地址:https://github.com/alibaba/arthas
官方文档:https://alibaba.github.io/arthas
2、Arthas 使用场景
得益于 Arthas 强大且丰富的功能,让 Arthas 能做的事情超乎想象。下面仅仅列举几项常见的使用情况,更多的使用场景可以在熟悉了 Arthas 之后自行探索。
是否有一个全局视角来查看系统的运行状况?
为什么 CPU 又升高了,到底是哪里占用了 CPU ?
运行的多线程有死锁吗?有阻塞吗?
程序运行耗时很长,是哪里耗时比较长呢?如何监测呢?
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
有什么办法可以监控到 JVM 的实时运行状态
3、Arthas 下载运行
前文已经提到,Arthas 是一款命令行交互模式的 Java 诊断工具,由于是 Java 编写,所以可以直接下载相应 的 jar 包运行。
如果下载速度比较慢,可以尝试用阿里云的镜像仓库,比如要下载3.x.x版本(替换3.x.x为最新版本),下载的url是:
curl -O https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar
-pid 15146 指定目标java进程ID
-target-ip 127.0.0.1 指定监听 ip
-telnet-port 3658 此端口供telnet 用,
-http-port 8563 指定http端口
更多参数设置
[root@tmp opt]# java -jar arthas-boot.jar -h [INFO] arthas-boot version: 3.2.0 Usage: arthas-boot [-h] [--target-ip <value>] [--telnet-port <value>] [--http-port <value>] [--session-timeout <value>] [--arthas-home <value>] [--use-version <value>] [--repo-mirror <value>] [--versions] [--use-http] [--attach-only] [-c <value>] [-f <value>] [--height <value>] [--width <value>] [-v] [--tunnel-server <value>] [--agent-id <value>] [--stat-url <value>] [pid] Options and Arguments: -h,--help Print usage --target-ip <value> The target jvm listen ip, default 127.0.0.1 --telnet-port <value> The target jvm listen telnet port, default 3658 --http-port <value> The target jvm listen http port, default 8563 --session-timeout <value> The session timeout seconds, default 1800 (30min) --arthas-home <value> The arthas home --use-version <value> Use special version arthas --repo-mirror <value> Use special maven repository mirror, value is center/aliyun or http repo url. --versions List local and remote arthas versions --use-http Enforce use http to download, default use https --attach-only Attach target process only, do not connect -c,--command <value> Command to execute, multiple commands separated by ; -f,--batch-file <value> The batch file to execute --height <value> arthas-client terminal height --width <value> arthas-client terminal width -v,--verbose Verbose, print debug info. --tunnel-server <value> The tunnel server url --agent-id <value> The agent id register to tunnel server --stat-url <value> The report stat url <pid> Target pid
除了直接运行之外,还可以: 把Arthas安装到基础镜像里;以Java Agent的方式启动;执行结果存日志,方便分析。
4、教程
命令列表
https://arthas.gitee.io/commands.html
在线视频
https://alibaba.github.io/arthas/arthas-tutorials?language=cn
5. 通过 浏览器/telnet 连接arthas
Arthas 目前支持 Web Console,用户在 attach 成功之后,可以直接访问:http://127.0.0.1:3658/ 或者 终端: telnet ip 3658
默认情况下,arthas 只 listen 127.0.0.1,所以如果想从远程连接,则可以使用 --target-ip 参数指定 listen 的 IP,更多参考 -h 的帮助说明。 注意会有安全风险,考虑下面的 tunnel server 的方案。https://alibaba.github.io/arthas/web-console.html#arthas-tunnel-serverarthas
4、使用过程问题记录
直接退出后 占用端口 未释方: 退出 arthas 时候,需要使用 stop 清理
共 0 条评论