Arthas: Unable to open socket file: target process not responding or HotSpot VM not loaded

Created on 6 Dec 2018  ·  17Comments  ·  Source: alibaba/arthas

  • [ ] 我已经在 issues 里搜索,没有重复的issue。

环境信息

  • arthas-boot.jar 或者 as.sh 的版本: 3.0.5
  • Arthas 版本: 3.0.5
  • 操作系统版本: CentOS release 6.9
  • Java版本: 1.8.0_151
[root@localhost arthas]# java -jar arthas-boot.jar 
* [1]: 2705 jar
  [2]: 40018 jar
  [3]: 105193 jar
  [4]: 3036 Bootstrap
  [5]: 39807 jar
2
[INFO] arthas home: /root/.arthas/lib/3.0.5/arthas
[INFO] Try to attach process 40018
com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
    at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:106)
    at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:78)
    at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:250)
    at com.taobao.arthas.core.Arthas.attachAgent(Arthas.java:72)
    at com.taobao.arthas.core.Arthas.<init>(Arthas.java:25)
    at com.taobao.arthas.core.Arthas.main(Arthas.java:99)
[ERROR] Start arthas failed, exception stack trace: 
[ERROR] attach fail, targetPid: 40018

question-answered

Most helpful comment

可能是你Tomcat启动程序是用普通用户启动,但是执行arthas使用root用户执行的。 意见仅做参考

All 17 comments

试下 jstack 看能连接到进程上不

有同样的问题,sudo也不行,但是每次试图连接的时候,demo进程会触发一次thread dump。
然后jstack无法连接,提示是一样的,进程确实是活着的

finyu@finyu-nb0:/mnt/c/Users/finyu/Downloads$ java -jar arthas-boot.jar
* [1]: 208 jar
1
[INFO] arthas home: /home/finyu/.arthas/lib/3.0.5/arthas
[INFO] Try to attach process 208
[ERROR] Start arthas failed, exception stack trace:
com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
        at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:106)
        at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:78)
        at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:250)
        at com.taobao.arthas.core.Arthas.attachAgent(Arthas.java:72)
        at com.taobao.arthas.core.Arthas.<init>(Arthas.java:25)
        at com.taobao.arthas.core.Arthas.main(Arthas.java:99)
[ERROR] attach fail, targetPid: 208

参考这个: #359

但是我demo都不行呀,那个上面也没提出什么解决方法吧

参考这个: #359

但是我demo都不行呀,那个上面也没提出什么解决方法吧

如果是进程负载高,没响应,这个无解。只能heapdump来分析。

arthas-demo如果不行的话,可以试下换个环境,换个jdk来试下。

  • jstackarthas,都是普通的java agent。所以如果jstack不能连接到进程上,arthas基本也不能成功。

  • 关于jstack的实现,可以参考: https://zhuanlan.zhihu.com/p/36224094

  • jstack -F实现原理和普通的jstack不一样,是通过Java ServiceabilityAgent来实现的,类似debug。可以参考这个pdf:
    java_web_serviceability_agent.pdf

  • jstackarthas,都是普通的java agent。所以如果jstack不能连接到进程上,arthas基本也不能成功。
  • 关于jstack的实现,可以参考: https://zhuanlan.zhihu.com/p/36224094
  • jstack -F实现原理和普通的jstack不一样,是通过Java ServiceabilityAgent来实现的,类似debug。可以参考这个pdf:
    java_web_serviceability_agent.pdf

请问,arthas是否可以添加类似的 -F 选项?
有些场景,可能只有 -F 才能执行成功.

大佬可以评估一下,需要的话,我这边很有兴趣去研究实现一个,提供一个pr

  • jstackarthas,都是普通的java agent。所以如果jstack不能连接到进程上,arthas基本也不能成功。
  • 关于jstack的实现,可以参考: https://zhuanlan.zhihu.com/p/36224094
  • jstack -F实现原理和普通的jstack不一样,是通过Java ServiceabilityAgent来实现的,类似debug。可以参考这个pdf:
    java_web_serviceability_agent.pdf

请问,arthas是否可以添加类似的 -F 选项?
有些场景,可能只有 -F 才能执行成功.

大佬可以评估一下,需要的话,我这边很有兴趣去研究实现一个,提供一个pr

是两种不同的机制,我个人感觉是没办法实现的。如果可以实现,非常欢迎提PR :)

可能是你Tomcat启动程序是用普通用户启动,但是执行arthas使用root用户执行的。 意见仅做参考

可能是你Tomcat启动程序是用普通用户启动,但是执行arthas使用root用户执行的。 意见仅做参考

这个才是对头

用jstack也不能连,jstack -F看了下没有死锁,服务器进程打印的日志看起来没什么问题,服务器的资源消耗也不大,启动服务器和arthas都是root用户起的,现在生产环境进程不能停,会因为访问人数下降服务器负载降低后能重新attach吗。

我也遇到同样问题,arthas是root用户,应用是其他用户,使用root用户的arthas或jstack attach就报这个错,使用与应用相同用户attach就正常,这是什么原因?

这是java原生的机制 利用socket通信 这个是在用户级别的

可能是你Tomcat启动程序是用普通用户启动,但是执行arthas使用root用户执行的。 意见仅做参考

@hengyunabc

那解决办法呢?
一般服务器上的 tomcat 或者 resin 等等都是以 nobody 用户或者其他低权限用户运行的
一般刚开始使用的新手,应该都遇到这个问题的哈,这些建议写到新手教程文档里面~~~

我这边应用是work, arthas-boot.jar是root, 然后修改arthas-boot.jar权限为work就可以了

自测的时候还有个注意的地方,不要用debug的方式暂停线程,这样也会出现这个错误。可以采取Thread.sleep

自测的时候还有个注意的地方,不要用debug的方式暂停线程,这样也会出现这个错误。可以采取Thread.sleep

Maybe you can use thread debug
image

Was this page helpful?
0 / 5 - 0 ratings