arthas(阿尔萨斯) 使用问题汇总

2023-12-13 12:56:51

1、arthas查看不到java进程

1.1、首先要保证你的环境变量配置是正确的

 java -verion
 javac -version 都能正常显示
[root@db arthas]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@db arthas]#
[root@db arthas]# javac -version
javac 1.8.0_181
[root@db arthas]#

1.2、jps 也看不到java进程

这就尴尬了,jps为什么不显示已经启动的Java进程?
一般来说java程序启动之后会在/tmp/hsperfdata_[用户名]目录下创建一个以该进程PID为名称的目录,该PID下放一些相关信息。jps就是去该目录去获取进程的。那我们cd /tmp/hsperfdata_root/(我用的root用户) 去看看,果然该目录没有对应PID的目录。
原因:
(1)、磁盘读写、目录权限问题

若该用户没有权限写/tmp目录或是磁盘已满,则无法创建/tmp/hsperfdata_userName/pid文件。或该文件已经生成,但用户没有读权限

(2)、临时文件丢失,被删除或是定期清理
对于linux机器,一般都会存在定时任务对临时文件夹进行清理,导致/tmp目录被清空。这也是该现象主要的原因。常用的可能定时删除临时目录的工具为crontab、redhat的tmpwatch、ubuntu的tmpreaper等等
这个导致的现象可能会是这样,用jconsole监控进程,发现在某一时段后进程仍然存在,但是却没有监控信息了。

(3)、java进程信息文件存储地址被设置,不在/tmp目录下
上面我们在介绍时说默认会在/tmp/hsperfdata_userName目录保存进程信息,但由于以上1、2所述原因,可能导致该文件无法生成或是丢失,所以java启动时提供了参数(-Djava.io.tmpdir),可以对这个文件的位置进行设置,而jps、jconsole都只会从/tmp目录读取,而无法从设置后的目录读物信息。

关于设置该文件位置的参数为-Djava.io.tmpdir

其他:
/tmp/hsperfdata_userName/pid文件会在对应java进程退出后被清除。如果java进程非正常退出(如kill -9),那么pid文件会被保留,直到执行一次java命令或是加载了jvm程序的命令(如jps、javac、jstat),会将所有无用的pid文件都清除掉

如何解决:
1、虽然我在java程序启动过程修改了-Djava.io.tmpdir参数,把.pid文件位置修改在了/tmp/hsperfdata_userName目录下,但是重启程序后只生成了一个带有java程序端口的文件夹,使用jps仍旧找不到。
2、此时可以重启服务器,这样虽然找得到,但是代价太大,不建议。
3、最后我采用的方式是,去自己的java程序安装路径下,找到tmp文件夹(具体路径可在自己的java程序启动脚本中找到)下对应的.pid文件,然后复制一份该文件到/tmp/hsperfdata_userName下面,然后再使用jps就可以找到对应的java进行了,Arthas也能顺利启动了。

我是使用第二种方法

2、离线安装问题

很多环境不能访问外网,会导致在线安装不了。

解决方法:

1、进入到/Users/herman/.arthas/lib/3.1.7/arthas路径下,把所有的内容打包,上传到服务器。
2、解压到用户目录下。
3、进入到/root/.arthas/lib/3.7.1/arthas
4、赋权限 chmod +x as.sh

5、执行./as.sh

3、如何使用arthas

Arthas - Java 线上问题定位处理的终极利器

文章来源:https://blog.csdn.net/shandian534/article/details/134966291
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。