arthas-boot.jar 或者 as.sh 的版本: 3.0.5[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
试下 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来试下。
jstack和arthas,都是普通的java agent。所以如果jstack不能连接到进程上,arthas基本也不能成功。
关于jstack的实现,可以参考: https://zhuanlan.zhihu.com/p/36224094
jstack -F实现原理和普通的jstack不一样,是通过Java ServiceabilityAgent来实现的,类似debug。可以参考这个pdf:
java_web_serviceability_agent.pdf
jstack和arthas,都是普通的java agent。所以如果jstack不能连接到进程上,arthas基本也不能成功。- 关于
jstack的实现,可以参考: https://zhuanlan.zhihu.com/p/36224094jstack -F实现原理和普通的jstack不一样,是通过Java ServiceabilityAgent来实现的,类似debug。可以参考这个pdf:
java_web_serviceability_agent.pdf
请问,arthas是否可以添加类似的 -F 选项?
有些场景,可能只有 -F 才能执行成功.
大佬可以评估一下,需要的话,我这边很有兴趣去研究实现一个,提供一个pr
jstack和arthas,都是普通的java agent。所以如果jstack不能连接到进程上,arthas基本也不能成功。- 关于
jstack的实现,可以参考: https://zhuanlan.zhihu.com/p/36224094jstack -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

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