ablog

不器用で落着きのない技術者のメモ

perf-map-agent で Java のプロセスにアタッチすると AttachNotSupportedException が発生する

事象

perf-map-agent で Java のプロセスにアタッチすると "Unable to open socket file: target process not responding or HotSpot VM not loaded" というエラーが発生する。

  • Java を実行する。
$ java ... 
  • 別セッションで perf-map-agent で実行中の Java のプロセスにアタッチする。
$ ps -ef|grep java
$ java -cp attach-main.jar:$JAVA_HOME/lib/tools.jar net.virtualvoid.perf.AttachOnce <PID>
(中略)
Caused by: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded

原因

Java を実行したのと別セッションで perf-map-agent を実行したため。

[root@netflow lib]# java -Xbootclasspath/a:/usr/java/jdk1.8.0_60/lib/tools.jar -jar /opt/appdyn/javaagent.jar 11692
Attaching to VM [11692]
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.singularity.ee.agent.appagent.AgentEntryPoint.main(AgentEntryPoint.java:494)
Caused by: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded

Can we please re-run in new shell prompt with same user logged in who launched the jvm process that we are trying to attach with? and see how it goes.

Solved: Attaching the Java Agent to a Running JVM Process - Community | AppDynamics

対策

Java を実行したのと同一セッションで perf-map-agent を実行する。

$ java ... &
$ ps -ef|grep java
$ java -cp attach-main.jar:$JAVA_HOME/lib/tools.jar net.virtualvoid.perf.AttachOnce <PID>