Arthas arthas-boot支持的参数 案例

Arthas

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。

Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  • 是否有一个全局视角来查看系统的运行状况?
  • 有什么办法可以监控到JVM的实时运行状态?
  • 怎么快速定位应用的热点,生成火焰图?

本教程会以一个简单的应用为例,演示arthas-boot支持的参数。

Arthas demo

下载arthas-demo.jar,再用java -jar命令启动:

1
wget https://arthas.aliyun.com/arthas-demo.jar;java -jar arthas-demo.jar

arthas-demo是一个很简单的程序,它随机生成整数,再执行因式分解,把结果打印出来。如果生成的随机数是负数,则会打印提示信息。

arthas-boot支持的参数

在新的Terminal 2里,下载arthas-boot.jar

1
wget https://arthas.aliyun.com/arthas-boot.jar

arthas-boot.jar 支持很多参数,可以执行 java -jar arthas-boot.jar -h 来查看。

1
java -jar arthas-boot.jar -h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
$ java -jar arthas-boot.jar -h
[INFO] arthas-boot version: 3.3.6
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>] [--select <value>] [pid]

Bootstrap Arthas

EXAMPLES:
java -jar arthas-boot.jar <pid>
java -jar arthas-boot.jar --target-ip 0.0.0.0
java -jar arthas-boot.jar --telnet-port 9999 --http-port -1
java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws'
java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws'
--agent-id bvDOe8XbTM2pQWjF4cfw
java -jar arthas-boot.jar --stat-url 'http://192.168.10.11:8080/api/stat'
java -jar arthas-boot.jar -c 'sysprop; thread' <pid>
java -jar arthas-boot.jar -f batch.as <pid>
java -jar arthas-boot.jar --use-version 3.3.6
java -jar arthas-boot.jar --versions
java -jar arthas-boot.jar --select arthas-demo
java -jar arthas-boot.jar --session-timeout 3600
java -jar arthas-boot.jar --attach-only
java -jar arthas-boot.jar --repo-mirror aliyun --use-http
WIKI:
https://arthas.aliyun.com/doc

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
--select <value> select target process by classname or
JARfilename
<pid> Target pid

参数详解

指定目标pid

可以使用jps命令查看pid。

1
jps

直接在参数中添加pid,可指定目标pid。

1
java -jar arthas-boot.jar 1

允许外部访问

默认情况下, arthas server侦听的是 127.0.0.1 这个IP,如果希望远程可以访问,可以使用--target-ip的参数。

1
java -jar arthas-boot.jar --target-ip 0.0.0.0

列出所有的版本

1
java -jar arthas-boot.jar --versions

使用指定版本:

1
java -jar arthas-boot.jar --use-version 3.1.0

打印运行的详情

使用-v或者-verbose

1
java -jar arthas-boot.jar -v

指定需要执行的命令目标pid

可以使用--command或者-c参数指定,并同时指定pid,多个命令之间用;分隔。

1
java -jar arthas-boot.jar -c 'sysprop; thread' 1

指定需要执行的批处理文件目标pid

可以使用--command或者-c参数指定,并同时指定pid。

1
java -jar arthas-boot.jar -f batch.as 1

通过类名或者jar文件名指定目标进程

通过--select参数类名或者jar文件名指定目标进程

1
java -jar arthas-boot.jar --select arthas-demo

指定会话超时秒数

使用--session-timeout参数指定,默认为1800(30分钟)

1
java -jar arthas-boot.jar --session-timeout 3600

仅附加目标进程,不连接

1
java -jar arthas-boot.jar --attach-only

指定镜像仓库,强制使用http

--repo-mirror使用特定maven仓库镜像,参数可以为center/aliyun或http仓库地址。

--use-http强制使用http下载,默认使用https。

1
java -jar arthas-boot.jar --repo-mirror aliyun --use-http

指定arthas客户端命令行宽高

1
java -jar arthas-boot.jar --height 25 --width 80

指定arthas主目录

1
java -jar arthas-boot.jar --arthas-home .

以Java Agent的方式启动

通常Arthas是以动态attach的方式来诊断应用,但从3.2.0版本起,Arthas支持直接以 java agent的方式启动。

比如下载全量的arthas zip包,解压之后以 -javaagent 的参数指定arthas-agent.jar来启动:

1
java -javaagent:/tmp/test/arthas-agent.jar -jar arthas-demo.jar

默认的配置项在解压目录里的arthas.properties文件里。

参考: https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html

使用as.sh

Arthas 支持在 Linux/Unix/Mac 等平台上一键安装:

1
curl -L https://arthas.aliyun.com/install.sh | sh

上述命令会下载启动脚本文件 as.sh 到当前目录,你可以放在任何地方或将其加入到 $PATH 中。

直接在shell下面执行./as.sh,就会进入交互界面。

也可以执行./as.sh -h来获取更多参数信息, 具体用法与java -jar arthas-boot.jar类似。

更多信息

通过本教程基本掌握了Arthas boot支持的参数。如果有更多的技巧或者使用疑问,欢迎在Issue里提出。

如果您在使用Arthas,请让我们知道。您的使用对我们非常重要:查看

文章拷贝来源:https://start.aliyun.com/course?spm=a2ck6.17690074.0.0.28bc2e7dHTphXs&id=PaiFAkJM