转载自:https://www.cnblogs.com/linhui0705/p/9795417.html

上个月,阿里开源了一个名为Arthas的监控工具。恰逢近期自己在写多线程处理业务,由此想到了一个问题。

如果在本机开发调试,IDE可以看到当前的活动线程,例如IntelliJ IDEA,线程是运行还是休眠,在Debugger→Threads可以看到。倘若代码写完提交,到测试环境上构建,要怎样才能看到测试服务器上的线程运行情况呢?

前面客套完了,教程GitHub上面也有,这里主要讲下个人在部署的过程和踩到的坑。仅供参考。

GitHub: https://github.com/alibaba/arthas

Docs: https://alibaba.github.io/arthas/index.html

笔者用的是CentOS7裸机。看过教程,按照步骤执行命令:

1
curl -L https://alibaba.github.io/arthas/install.sh | sh

下载了个名称为as.sh的脚本,执行脚本,发现:

1
2
3
[root@bogon arthas]# ./as.sh 
Arthas script version: 3.0.4
illegal ENV, please set $JAVA_HOME to JDK6+

既然是Java监控,没有Java运行环境是不可能跑得起来的(这不是废话吗)。马上安装JDK配置环境变量……这里笔者装的是JDK8u181

JDK: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

解压到/usr/java,执行vi /etc/profile配置环境变量

1
2
3
export JAVA_HOME=/usr/java/jdk1.8.0_181
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin

:wq保存退出,再执行命令使配置的变量生效

1
source /etc/profile

回到刚才的目录,启动arthas

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
[root@bogon ~]# cd /usr/local/arthas/
[root@bogon arthas]# ./as.sh 
Arthas script version: 3.0.4
Error: no available java process to attach.
 
Usage:
    ./as.sh [-b [-f SCRIPT_FILE]] [debug] [--use-version VERSION] [--attach-only] <PID>[@IP:TELNET_PORT:HTTP_PORT]
    [debug]         : start the agent in debug mode
    <PID>           : the target Java Process ID
    [IP]            : the target's IP
    [TELNET_PORT]   : the target's PORT for telnet
    [HTTP_PORT]     : the target's PORT for http
    [-b]            : batch mode, which will disable interactive process selection.
    [-f]            : specify the path to batch script file.
    [--attach-only] : only attach the arthas agent to target jvm.
    [--use-version] : use the specified arthas version to attach.
 
Example:
    ./as.sh <PID>
    ./as.sh <PID>@[IP]
    ./as.sh <PID>@[IP:PORT]
    ./as.sh debug <PID>
    ./as.sh -b <PID>
    ./as.sh -b -f /path/to/script
    ./as.sh --attach-only <PID>
    ./as.sh --use-version 2.0.20161221142407 <PID>
 
Here is the list of possible java process(es) to attatch:

结果发现,无可用Java进程。那就启动一个咯(挖鼻屎),继续……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@bogon arthas]# ./as.sh 
Arthas script version: 3.0.4
Found existing java process, please choose one and hit RETURN.
* [1]: 1244 test.jar
 
updating version 3.0.4 ...
######################################################################## 100.0%
./as.sh: line 182: unzip: command not found
mv: cannot stat ‘/tmp/temp_3.0.4_1265’: No such file or directory
update fail, ignore this update.
Calculating attach execution time...
Attaching to 1244 using version 3.0.4...
Error: Unable to access jarfile /root/.arthas/lib/3.0.4/arthas/arthas-core.jar
attach to target jvm (1244) failed, check /root/logs/arthas/arthas.log or stderr of target jvm for any exceptions.

然而,程序没有如期运行成功。

……

通过度娘Google各种途径,看了FAQ,作者建议是手动安装+手动拼接命令行启动。但是,有些麻烦,不喜欢(任性)

后面,看到了这个Issue: Error: Unable to access jarfile /root/.arthas/lib/3.0.4/arthas/arthas-core.jar。咦这不就是我共患难的兄弟吗?马上点进去。看到大神ralf0131的回答,顿时茅厕塞顿开:

1
First, please ensure /root/.arthas/lib/3.0.4/arthas/arthas-core.jar does exist.

cd到/root/.arthas/lib/3.0.4,发现目录下没有jar包。尝不到这瓜有点不甘心,只好手动安装了(真香~)

当前最新的包是3.0.4。下载,解压:

1
2
3
4
[root@bogon 3.0.4]# wget https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.0.4/arthas-packaging-3.0.4-bin.zip
......
[root@bogon 3.0.4]# unzip arthas-packaging-3.0.4-bin.zip 
-bash: unzip: command not found

好吧,我装,我解压……

1
2
[root@bogon 3.0.4]# yum -y install unzip
[root@bogon 3.0.4]# unzip arthas-packaging-3.0.4-bin.zip

顿时发现,刚才不是说/root/.arthas/lib/3.0.4/arthas路径下木有jar包吗,刚刚我把jar包解压到/root/.arthas/lib/3.0.4,只要再新建个arthas目录,再把4个jar包移进去就OK了。

1
2
3
[root@bogon 3.0.4]# mkdir arthas
[root@bogon 3.0.4]# mv *.jar arthas/
[root@bogon arthas]# ./as.sh

大功告……你以为这样就结束了?还有问题呢……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Arthas script version: 3.0.4
Found existing java process, please choose one and hit RETURN.
* [1]: 1244 test.jar
 
Calculating attach execution time...
Attaching to 1244 using version 3.0.4...
 
real    0m0.620s
user    0m0.148s
sys 0m0.043s
Attach success.
Connecting to arthas server... current timestamp is 1539615611
./as.sh: line 423: type: telnet: not found
'telnet' is required.

还要装telnet-client……

1
[root@bogon 3.0.4]yum -y install telnet.x86_64

最后再启动,回车,大功告成!

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
[root@bogon arthas]# ./as.sh 
Arthas script version: 3.0.4
Found existing java process, please choose one and hit RETURN.
* [1]: 1244 test.jar
 
Calculating attach execution time...
Attaching to 1244 using version 3.0.4...
 
real    0m0.132s
user    0m0.050s
sys 0m0.113s
Attach success.
Connecting to arthas server... current timestamp is 1539615853
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: 1244
timestamp: 1539615854095
 
$

接下来就可以各种命令各种姿势各种把弄了……

总结:

  1. 安装arthas前需要装JDK,配置好JAVA_HOME等环境变量,以及telnet。unzip看情况,如果你解压完再上传到服务器,也行……

  2. 不知道是bug还是神马情况,按照文档的步骤再一次装在测试的服务器上,程序正常运行,没有报Error: Unable to access jarfile /root/.arthas/lib/3.0.4/arthas/arthas-core.jar的错误,4个jar包都在预期的路径。简单来说,有的机器运行./as.sh是会因少jar包报错的,有的是会正常运行的,具体情况具体分析。后期继续关注arthas的GitHub动态,看项目的最新进展。

就酱。睡觉……

初识阿里开源的本地Java进程监控调试工具arthas(阿尔萨斯)的更多相关文章

  1. 轻量级监控平台之java进程监控脚本

    轻量级监控平台之java进程监控脚本 #!/bin/bash #进程监控脚本 #功能需求: 上报机器Java进程的进程ID,对应的端口号service tcp端口号,tomcat http 端口号,以 ...

  2. JVisualVM监控本地Java进程

    一.基于JVisualVM的可视化监控 1.打开C:\Program Files\Java\jdk1.8.0_131\bin下的jvisualvm.exe 2.打开后,会列出本机所有的Java进程 3 ...

  3. 初识阿里开源诊断工具Arthas

    上个月,阿里开源了一个名为Arthas的监控工具.恰逢近期自己在写多线程处理业务,由此想到了一个问题. 如果在本机开发调试,IDE可以看到当前的活动线程,例如IntelliJ IDEA,线程是运行还是 ...

  4. Java进程监控

    目录 1.引言 2. 程序启停, 为进程自定义项目名称 3. 操作系统判断 4. 获取进程信息 5. 内存,CPU信息 6. 堆内存信息 7. 端口信息 8. 线程信息 9. MXBean使用样例 9 ...

  5. 关于visualvm无法监控本地java进程

    https://blog.csdn.net/weixin_43827693/article/details/105990675?spm=1001.2101.3001.6661.1&utm_me ...

  6. 阿里云ECS主机自定义进程监控

    由于业务的关系我们用的是阿里云的ECS主机,需要对业务进程需要监控,查看后发现阿里云提供自定义监控SDK,这有助于我们定制化的根据自身业务来做监控,下面我就根据业务需求来介绍一个简单的自定义监控配置 ...

  7. 关于 Java 性能监控您不知道的 5 件事,第 1 部分

    责怪糟糕的代码(或不良代码对象)并不能帮助您发现瓶颈,提高 Java? 应用程序速度,猜测也不能帮您解决.Ted Neward 引导您关注 Java 性能监控工具,从5 个技巧开始,使用Java 5 ...

  8. 利用jdk中工具完成Java程序监控方法记录

    转载加自己整理的部分内容,转载自:http://jiajun.iteye.com/blog/810150 记录下JConsole使用方法 一.JConsole是什么    从Java 5开始 引入了 ...

  9. Arthas在线java进程诊断工具 在线调试神器

    tag: java 诊断 堆栈 在线调试 耗时 死锁 arthas 阿里巴巴 Arthas (阿尔萨斯) Arthas 是 Alibaba 开源的Java诊断工具,深受开发者喜爱. 官网文档:http ...

随机推荐

  1. Vue 实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀 $,以便与代理的 data 属性区分

    var data = { a: 1 } var vm = new Vue({ el: '#example', data: data }) vm.$data === data // -> true ...

  2. js 对小数进行格式化(保留小数,去除小数后的0)

    // 如果去零时需要保留位数: (比如 19.520100 --> 19.52) parseFloat(Number(19.520100).toFixed(2)) // 如果只想去除小数点后多余 ...

  3. 【C/C++】指针

    指针定义 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,必须在使用指针存储其他变量地址之前,对其进行声明.指针变量声明的一般形式为: type *var-na ...

  4. CTSC 2017 游戏[概率dp 线段树]

    小 R 和室友小 B 在寝室里玩游戏.他们一共玩了 $n$ 局游戏,每局游戏的结果要么是小 R 获胜,要么是小 B 获胜. 第 $1$ 局游戏小 R 获胜的概率是 $p_1$,小 B 获胜的概率是 $ ...

  5. Centos pip 安装uwsgi 报错“fatal error: Python.h: No such file or directory”

    解决方法: 安装python-devel即可,注意,不是python-dev yum -y install python-devel

  6. [后渗透]Windows server 80端口复用后门

    0x01 简介 该后门的基本原理是使用Windows 的远程管理管理服务WinRM,组合HTTP.sys驱动自带的端口复用功能,一起实现正向的端口复用后门. 具体细节信息请参考:https://pap ...

  7. kubernetes --- weave

    #wget 'https://cloud.weave.works/launch/k8s/weavescope.yaml?k8s-service-type=NodePort&k8s-versio ...

  8. Guava集合工具

    JDK提供了一系列集合类,如下所示,极大的方便了开发工作,并针对这些类提供了一个工具类java.util.Collections,Guava在此基础上添加了一些常用工具类方法,相比于java.util ...

  9. Postman 插件安装和使用

    1.google商店 搜索“谷歌访问助手” 2.在商店搜索Postman 3.安装Postman 4.访问chrome://apps/  5.点击postman

  10. PHP 命令行参数解析工具类

    <?php/** * 命令行参数解析工具类 * @author guolinchao * @email luoyecb@163.com */class CommandLine{ // store ...