确定使用的jdk
下载arthas工具
curl -O https://arthas.aliyun.com/arthas-boot.jar
复制到容器内的/opt/arthas 目录
docker ps -a
sudo docker exec -ti -u root 6919bb12ede0 /bin/bash
mkdir /opt/arthas
exit
docker cp /opt/arthas/arthas-boot.jar 6919bb12ede0:/opt/arthas/arthas-boot.jar
docker exec -it 6919bb12ede0 /bin/bash
cd /opt/arthas
查找java的进程ID
ps -aux
启动arthas
java -jar arthas-boot.jar 7
就可以启动成功了
如果有其他错误
(1 服务器使用openjdk
如果你系统上使用的jdk是openjdk,在运行java -jar xxx.jar时,会出现Can not find java process. Try to run `jps` command lists the instrumented Java HotSpot VMs on the target system.Please select an available pid.的异常。那是因为其没有jps,arthas是用jps去找java进程的,解决方案有两种,第一种,将openjdk改为oracle jdk,这个就不展开讲了。第二种解决方案,便是直接lsof -i|grep 端口号找到你想要排查的java服务pid,然后直接在命令后跟上pid即可运行,例如pid为123,命令运行:java -jar xxx.jar 123
(2 运行启动命令时,遇到arthas Can not find tools.jar错误
当你运行启动命令java -jar xxx.jar时,如果遇到这个报错的话,可能是因为在运行时,无法找到对应jdk的路径,导致用java命令运行时,无法正常启动。这种情况只需先找到你jdk文件夹的路径,在bin目录下运行java -jar命令即可。例如jdk路径为/home/jdk1.8.0_161,命令运行:/home/jdk1.8.0_161/bin/java -jar xxxjar
(3 运行启动命令时,遇到Unable to open socket file: target process not responding or HotSpot VM not loaded错误
在运行启动命令时,还可能会出现这个问题,这个问题是因为在运行该java服务时,服务器登录的用户需要和目标进程具有相同的权限。比如,我是用tomcat用户发布java服务,但是我现在登录的用户是root,他们用户不一致,所以导致无法运行。
如何查看当前java服务是用户发布可以使用:ps aux|grep 端口号 来查看,第一行就是java服务运行时使用的用户,然后使用sudo su 用户名 命令切换用户到相同级别的用户,然后我们就可以快乐的运行arthas了。文章来源:https://www.toymoban.com/news/detail-738165.html
可能用到的命令文章来源地址https://www.toymoban.com/news/detail-738165.html
lsof -i|grep 8080
ps aux|grep 8080
sudo su 1001
到了这里,关于docker 容器内 使用 arthas的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!