Arthas
是Alibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas
可以帮助你解决:
Arthas
采用命令行交互模式,同时提供丰富的 Tab
自动补全功能,进一步方便进行问题的定位和诊断。
使用说明可以看下官方的文档https://alibaba.github.io/arthas/
以下通过CentOS系统举例来安装Arthas
首先去Oracle下载JDK,可以通过wget
或者curl -O
来下载到Linux主机上。
最方便的就是下载一个tar.gz格式的压缩包,然后通过tar -zxf
解压,以下是笔者最终存放jdk的物理路径
[nico@VM_0_17_centos jdk1.8.0_181]$ pwd
/usr/lib/java-1.8.0/jdk1.8.0_181
接下来配置环境变量,通过vim /etc/profile
进入编辑操作,并增加以下配置
export JAVA_HOME=/usr/lib/java-1.8.0/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
退出并保存,通过执行source /etc/profile
立即生效
然后分别执行java
和javac
验证环境是否生效
Arthas非常小巧,官方有一个可直接执行的sh脚本供我们使用,可以通过以下指令下载
curl -L https://alibaba.github.io/arthas/install.sh | sh
启动Arthas
./as.sh
Arthas启动需要存在至少一个及以上的Java进程,这里我们为了方便测试,直接安装ElasticSearch。
和安装JDK的方式类似,我们去官方下载一个tar.gz
的压缩包,然后解压
[nico@VM_0_17_centos elasticsearch]$ ll
total 95612
drwxr-xr-x 9 nico root 4096 Sep 19 09:03 elasticsearch-6.4.0
-rw-r--r-- 1 nico root 97901357 Aug 23 23:21 elasticsearch-6.4.0.tar.gz
ElasticSearch的不允许root用户启动,所以笔者用的是nico账号,创建账号过程如下
adduser nico
passwd nico
#输入密码
#将as.sh和elasticsearch的目录权限赋予nico账户
chown nico as.sh
chown -R nico elasticsearch
su nico
以上指令请分开到对应的目录执行,执行完毕之后我们进入elasticsearch目录下的bin目录中,启动elasticsearch
./elasticsearch
进入as.sh
所在目录,启动Arthas
./as.sh
[nico@VM_0_17_centos arthas]$ ./as.sh
Arthas script version: 3.0.4
Found existing java process, please choose one and hit RETURN.
* [1]: 19670 org.elasticsearch.bootstrap.Elasticsearch
我们看到,当前只有ElasticSearch一个进程,输入1监控ElasticSearch
[nico@VM_0_17_centos arthas]$ ./as.sh
Arthas script version: 3.0.4
Found existing java process, please choose one and hit RETURN.
* [1]: 19670 org.elasticsearch.bootstrap.Elasticsearch
1
Calculating attach execution time...
Attaching to 19670 using version 3.0.4...
real 0m0.227s
user 0m0.177s
sys 0m0.035s
Attach success.
Connecting to arthas server... current timestamp is 1537320967
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki: https://alibaba.github.io/arthas
version: 3.0.4
pid: 19670
timestamp: 1537320967728
$
启动成功,Arthas提供一个shell的操作模式来供我们去监控Java进程,具体指令可以看下官方的Wiki
(1)遇到报错java.security.AccessControlException: Access Denied
官方解决办法
Add the permission in client.policy (for the application client), or in server.policy (for EJB/web modules) for the application that needs to set the property. By default, applications only have “read” permission for properties.
For example, to grant read/write permission for all the files in the codebase directory, add or append the following to client.policy or server.policy:
grant codeBase "file:/.../build/sparc_SunOS/sec/-" {
permission java.util.PropertyPermission "*", "read,write";
};
java.policy所在的目录为JDK所在目录下的相对目录jre/lib/security
vim java.policy
尾部增加一行即可
permission java.security.AllPermission;