docker 容器内 使用 arthas

确定使用的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了。

可能用到的命令

lsof -i|grep 8080
ps aux|grep 8080
sudo su 1001

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值