首页 技术 正文
技术 2022年11月16日
0 收藏 494 点赞 3,231 浏览 5433 个字

转载自: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的脚本,执行脚本,发现:

123 [root@bogon arthas]# ./as.sh Arthas script version: 3.0.4illegal 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配置环境变量

123 export JAVA_HOME=/usr/java/jdk1.8.0_181export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jarexport PATH=$PATH:$JAVA_HOME/bin

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

1 source /etc/profile

回到刚才的目录,启动arthas

12345678910111213141516171819202122232425262728 [root@bogon ~]# cd /usr/local/arthas/[root@bogon arthas]# ./as.sh Arthas script version: 3.0.4Error: 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进程。那就启动一个咯(挖鼻屎),继续……

1234567891011121314 [root@bogon arthas]# ./as.sh Arthas script version: 3.0.4Found 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 foundmv: cannot stat ‘/tmp/temp_3.0.4_1265’: No such file or directoryupdate 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.jarattach 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。下载,解压:

1234 [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

好吧,我装,我解压……

12 [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了。

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

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

1234567891011121314 Arthas script version: 3.0.4Found 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.620suser    0m0.148ssys 0m0.043sAttach 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

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

1234567891011121314151617181920212223242526272829 [root@bogon arthas]# ./as.sh Arthas script version: 3.0.4Found 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.132suser    0m0.050ssys 0m0.113sAttach success.Connecting to arthas server... current timestamp is 1539615853Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.                            /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'                          |  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.                          |  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |                         `--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'    wiki: https://alibaba.github.io/arthasversion: 3.0.4pid: 1244timestamp: 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动态,看项目的最新进展。

就酱。睡觉……

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905